我写它采用广播接收器捕捉到的多媒体按键一个(从耳机“播放按钮”)的一些服务,它完美的作品在Android 2.3.x版本(HTC的Nexus One或HTC Desire的)
当我试图在Android 4.0.3(三星Nexus S)运行它不起作用(我的应用程序不会收到意图“android.intent.action.MEDIA_BUTTON”和“播放”按钮的行为像往常一样:停止/启动音乐)。
清单的内容:
... <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <receiver android:name=".buttonreceiver.MediaButtonIntentReceiver" > <intent-filter android:priority="10000" > <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver> ...
有没有办法让它在Android 4.0.3工作
编辑:我尝试提出的解决方案,我已经添加了动作和运行它,但我的接收器仍然没有收到意图。 什么是代码更奇怪的登记接收器也不起作用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about_and_activation_view);
Log.d("MR", "onCreate - " + getIntent().getAction());
mReceiver = new MediaButtonIntentReceiver();
registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_MEDIA_BUTTON));
}
现在,我完全糊涂了。
请确保您有您的应用程序的活动,并且用户尝试按下该按钮之前运行了此次活动。 在此之前,你的<receiver>
将不会收到任何广播 。
UPDATE
在Android 4.0及更高版本,看来你还需要调用registerMediaButtonEventReceiver()
上AudioManager
,以便接收的事件。 这种状态会保持到别的调用registerMediaButtonEventReceiver()
或直到调用unregisterMediaButtonEventReceiver()
例如,像这样的活性:
public class MediaButtonActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((AudioManager)getSystemService(AUDIO_SERVICE)).registerMediaButtonEventReceiver(new ComponentName(
this,
MediaButtonReceiver.class));
}
}
将使清单注册MediaButtonReceiver
得到ACTION_MEDIA_BUTTON事件。
如果你只是想你的应用程序是默认值,但不需要你可以用下面的方法按下按钮做任何事情。
此添加到清单文件(在“应用程序”节点):
<receiver android:name="BroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
在主要活动一下添加到的onCreate()或任何你想要运行应用程序时调用。 可能在的onResume()事件太有用了:
mAudioManager = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
mRemoteControlResponder = new ComponentName(getActivity().getPackageName(), BroadcastReceiver.class.getCanonicalName());
mAudioManager.registerMediaButtonEventReceiver(mRemoteControlResponder);