如何在 Oreo 中为媒体按钮注册广播接收器?
How register Broadcast Receiver for media button in Oreo?
我对新 Android 版本 8.0 (Oreo) 有疑问。
我必须注册广播,我使用以下代码执行此操作:
// android.intent.action.MEDIA_BUTTON
IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
r = new MediaButtonIntentReceiver();
// this line sets receiver priority
filter.setPriority(999);
registerReceiver(r, filter);
这适用于较旧的 Android 版本,但在 Android 8 上不起作用,因为必须注册显式广播,但我不知道如何注册。
如何注册显式广播以检测媒体按钮?
这是在Manifest.xml:
<receiver android:name=".MediaButtonIntentReceiver">
<intent-filter android:priority="999">
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
如果你想接收媒体按钮,你必须播放音频并使用mediasession。
i.g
MediaSession ms = new MediaSession(getApplicationContext(), getPackageName());
ms.setActive(true);
ms.setCallback(new MediaSession.Callback() {
@Override
public boolean onMediaButtonEvent(Intent mediaButtonIntent) {
Log.e("hmhm", "hmhm media button");
return super.onMediaButtonEvent(mediaButtonIntent);
}
});
// you can button by receiver after terminating your app
ms.setMediaButtonReceiver(mbr);
// play dummy audio
AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 48000, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT,
AudioTrack.getMinBufferSize(48000, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT), AudioTrack.MODE_STREAM);
at.play();
// a little sleep
at.stop();
at.release();
我对新 Android 版本 8.0 (Oreo) 有疑问。 我必须注册广播,我使用以下代码执行此操作:
// android.intent.action.MEDIA_BUTTON
IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
r = new MediaButtonIntentReceiver();
// this line sets receiver priority
filter.setPriority(999);
registerReceiver(r, filter);
这适用于较旧的 Android 版本,但在 Android 8 上不起作用,因为必须注册显式广播,但我不知道如何注册。 如何注册显式广播以检测媒体按钮?
这是在Manifest.xml:
<receiver android:name=".MediaButtonIntentReceiver">
<intent-filter android:priority="999">
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
如果你想接收媒体按钮,你必须播放音频并使用mediasession。
i.g
MediaSession ms = new MediaSession(getApplicationContext(), getPackageName());
ms.setActive(true);
ms.setCallback(new MediaSession.Callback() {
@Override
public boolean onMediaButtonEvent(Intent mediaButtonIntent) {
Log.e("hmhm", "hmhm media button");
return super.onMediaButtonEvent(mediaButtonIntent);
}
});
// you can button by receiver after terminating your app
ms.setMediaButtonReceiver(mbr);
// play dummy audio
AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 48000, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT,
AudioTrack.getMinBufferSize(48000, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT), AudioTrack.MODE_STREAM);
at.play();
// a little sleep
at.stop();
at.release();