如何在Oreo中为媒体按钮注册广播接收器? [英] How register Broadcast Receiver for media button in Oreo?
本文介绍了如何在Oreo中为媒体按钮注册广播接收器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我对新的Android版本(8.0(奥利奥))有疑问. 我必须注册一个广播,并使用以下代码进行此操作:
I have a problem with the new Android version, that is 8.0 (Oreo). I have to register a broadcast and I do this with this code:
// 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上却无效,因为有必要注册显式广播,但我不知道如何操作. 如何注册显式广播以检测媒体按钮?
This works on older Android version but on Android 8 this doesn't work because it is necessary register explicit broadcast but I don't know how. How can I register explicit broadcast to detect media button?
这在Manifest.xml中:
This is in Manifest.xml:
<receiver android:name=".MediaButtonIntentReceiver">
<intent-filter android:priority="999">
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
推荐答案
如果要接收媒体按钮,则必须播放音频并使用mediasession.
If you want to receive media button, you have to play audio and use 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();
这篇关于如何在Oreo中为媒体按钮注册广播接收器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文