私のアプリではheadset buttons get recognizedが押されてしまいましたが、ボタンの1つはMyCustomActivityのメソッドを呼び出す必要があります。問題はonReceiveの第一パラメータは、活動にキャストし、それがMyCustomActivityのメソッドにアクセスすることができないのと同じ問題を抱えている静的(ある場合を除きMyCustomActivityの内部クラスwon't work in Android 4.1を使用することができない状況である。BroadcastReceiverのサブクラスにパラメータを渡すにはどうすればいいですか?
だから、残された唯一の選択肢。私のために(2.xと4.1の両方をサポートするために)RemoteControlReceiverにパラメータとして活動を渡すために
あるしかし、私はどのように行うのか、その唯一の方法は、インスタンス化するとき、それは経由です:
private ComponentName mRemoteControlReceiver = new ComponentName(this, RemoteControlReceiver.class);
任意の追加パラメータをept?
この制限を回避するにはどうすればよいですか?
注:私は、パラメータを持つコンストラクタを持つものとしてRemoteControlReceiver
を定義しようとすると、私は次の例外受け取る:
E/AndroidRuntime(2836): java.lang.RuntimeException: Unable to instantiate receiver com.example.RemoteControlReceiver: java.lang.InstantiationException: can't instantiate class com.example.RemoteControlReceiver; no empty constructor
Caused by:
E/AndroidRuntime(2836): Caused by: java.lang.InstantiationException: can't instantiate class com.example.RemoteControlReceiver; no empty constructor
E/AndroidRuntime(2836): at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime(2836): at java.lang.Class.newInstance(Class.java:1319)
E/AndroidRuntime(2836): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2205)
をだから(アンドロイド4.1で導入された)この新しいregisterMediaButtonEventReceiver要件ことは明らかです空のコンストラクタが必要です。
これを回避する方法はありませんか?
たとえば、実際のRemoteControlReceiverオブジェクトへの参照を取得する方法がありますか(間接的にmAudioManager.registerMediaButtonEventReceiver()
によってインスタンス化されます)。私がアクセサリーを使用しての後にRemoteControlReceiver のデータメンバをインスタンス化することができますか?
ActivityのonResume/onCreateにBroadcastReceierを作成して登録し、onPause/onStop内で登録を解除することができます。このようにして、現在のアクティビティはそのライフタイムを処理することができ、受信者はコンテナ(アクティビティ)と通信できる必要があります。 –
@SudarNimalan私はすでにこれを試しました。これは[Android 2.xでのみ動作します](http://stackoverflow.com/questions/15058743/how-do-i-register-in-manifest-an-inner-media-button-broadcastreciver#comment21174031_15058783)。 4.1では動作しません。私は何とか 'RemoteControlReceiver'(BroadcastReceiverではなく)にMyCustomActivityについて知らせる必要があります。ありがとう。 – an00b
これは厳しいものですが、ここではアイデアがあります:[Extra](http://stackoverflow.com/a/14383023/418055)にIntent onReceiveが渡されたことを確認できますか?または、この[GlobalVariable trick](http://stackoverflow.com/a/6980006/418055)を使用しますか? –