ヘッドセットボタンを押すとアプリに認識されるようになりましたが、ボタンの1つがMyCustomActivityにあるメソッドを呼び出す必要があります。問題は、onReceiveの最初のパラメーターがActivityにキャストできないコンテキストであり、静的でない限り、Android 4.1ではMyCustomActivityの内部クラス の使用が機能しないことです(これには、MyCustomActivityのメソッドにアクセスできないという同じ問題があります。
したがって、(2.xと4.1の両方をサポートするために)私に残された唯一のオプションは、アクティビティをパラメーターとしてRemoteControlReceiverに渡すことです。
しかし、それをインスタンス化する唯一の方法が次の方法である場合、どうすればよいですか。
private ComponentName mRemoteControlReceiver = new ComponentName(this, RemoteControlReceiver.class);
追加のパラメータを受け入れないのはどれですか?
この制限を回避する方法はありますか?
注: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)
したがって、この新しいregisterMediaButtonEventReceiver要件(Android 4.1で導入)では、空のコンストラクターが必要であることは明らかです。
これを回避する方法はありませんか?
たとえば、実際のRemoteControlReceiverオブジェクトへの参照を取得する方法はありますか(を介して間接的にインスタンス化されますmAudioManager.registerMediaButtonEventReceiver()
)?インスタンス化された後、アクセサーを使用してRemoteControlReceiverのデータメンバーを設定できるようにするには?