【发布时间】:2013-06-09 16:37:47
【问题描述】:
我正在尝试使用 Android 3.0+ 中的广播接收器捕获 ACTION_MEDIA_BUTTON 意图。
我的接收器是我的 MainActivity 类的静态内部类。它是静态的,因为它是在我的 AndroidManifest.xml 中注册的,它必须找到类。但是,这意味着当按下播放/暂停按钮时,我的 BroadcastReceiver 无法返回我的活动。 onReceive 方法被调用,但由于该类是静态的,我无法通知我的活动。
使用对我的活动或 Handler 对象的引用也不起作用,因为我无法获取 Android 系统正在调用的 BroadcastReceiver 对象。
动态声明接收者也应该可以工作,但这在 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()));
【问题讨论】:
-
你为什么不使用
registerReceiver(),而是将接收者放在清单中?当您的活动不在前台时,您想对媒体按钮按什么操作? -
当我的活动不在前台时,我什么都不想做,否则它不起作用。我在我的 onCreate 中使用此代码来尝试动态注册它。 (见编辑)
-
啊,我明白了,
registerMediaButtonEventReceiver()是清单中的预期内容。鉴于您是前台活动,您确定需要打扰registerMediaButtonEventReceiver()吗?您不能使用标准onKeyEvent()来了解这些印刷机吗? -
是的,这可以解决问题。谢谢你。我可以创建最终答案来接受它,但也许它对你更好,因为你会得到 REP ;)
标签: android class android-activity static broadcastreceiver