我的应用程序已注册意图("android.intent.action.MEDIA_BUTTON"
)以处理使用以下代码
<receiver
android:name=".HeadsetEventReceiver"
android:enabled="true" >
<intent-filter android:priority="2147483647" >
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
接收方HeadsetEventReceiver
在接收此意图时执行某些操作。
现在我有一个示例应用程序,使用下面的代码广播带有"android.intent.action.MEDIA_BUTTON"
操作的Intent和有效的KeyEvent对象。
Intent newIntent = new Intent("android.intent.action.MEDIA_BUTTON") ;
KeyEvent event = new KeyEvent(System.currentTimeMillis(), System.currentTimeMillis(), KeyEvent.ACTION_DOWN, 79, 1, 1, 1, 1, 1, InputDevice.SOURCE_TOUCHPAD);
newIntent.putExtra(Intent.EXTRA_KEY_EVENT, event);
getApplicationContext().sendBroadcast(newIntent);
我的应用程序正在接收此Intent并处理此数据,就好像它是由于耳机按键实际广播一样。
我的查询是当任何应用程序尝试使用本机Intents发送广播时(例如:"android.intent.action.BOOT_COMPLETED"
)抛出securityException。为什么它不适用于上述Intent("android.intent.action.MEDIA_BUTTON"
)。
答案 0 :(得分:0)
由于 4.0或更高, Android文档表示您必须使用registerMediaButtonEventReceiver
来注册意图操作。如果没有注册到registerMediaButtonEventReceiver
,您将无法收到广播消息。
以下是记录的here
代码AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...
// Start listening for button presses
am.registerMediaButtonEventReceiver(RemoteControlReceiver);
...
// Stop listening for button presses
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
因此,如果您使用的是registerMediaButtonEventReceiver
,那么您将获得其他不会播放的广播。