Android 3.0 以降でブロードキャストレシーバーを使用して ACTION_MEDIA_BUTTON インテントをキャプチャしようとしています。
私のレシーバーは、MainActivity クラスの静的内部クラスです。AndroidManifest.xml に登録されており、クラスを見つける必要があるため、静的です。ただし、これは、再生/一時停止ボタンが押されたときに、BroadcastReceiver がアクティビティに戻る方法がないことを意味します。onReceive メソッドが呼び出されますが、クラスが静的であるため、アクティビティを通知できません。
Android システムによって呼び出されている BroadcastReceiver オブジェクトを取得できないため、アクティビティまたは Handler オブジェクトへの参照を使用しても機能しません。
レシーバーを動的に宣言することも機能するはずですが、奇妙な理由により、これは Android 3.0 以降では機能しません。それは何か関係があります:
AudioManager.registerMediaButtonEventReceiver(ComponentName)
これは呼び出す必要があります。
私のクラスのいくつかの図:
public class MainActivity extends Activity {
public static class MicReceiver extends BroadcastReceiver {
// onReceive is called
// How do I inform MainActivity of the press?
}
}
修正のためのアイデアはありますか?
ありがとう!
[編集] 受信者を動的に登録するには、以下のコードを参照してください: (これは現在機能していません)
mReceiver = new RemoteControlReceiver();
IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
filter.setPriority(2147483647);
registerReceiver(mReceiver, filter);
AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
am.registerMediaButtonEventReceiver(new ComponentName(getPackageName(), RemoteControlReceiver.class.getName()));