Как зарегистрировать широковещательный приемник для кнопки media в 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 это не работает, потому что необходимо зарегистрировать явную трансляцию, но я не знаю, как. Как я могу зарегистрировать явную трансляцию, чтобы обнаружить кнопку media?
Это в Манифесте.xml:
<receiver android:name=".MediaButtonIntentReceiver">
<intent-filter android:priority="999">
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
1 ответ:
Если вы хотите получить кнопку media, вы должны воспроизвести аудио и использовать 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();