任何应用程序都可以使用操作名称" android.intent.action.MEDIA_BUTTON"广播Intent。

时间:2015-12-09 10:11:12

标签: java android android-intent

我的应用程序已注册意图("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")。

1 个答案:

答案 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,那么您将获得其他不会播放的广播。