簡體   English   中英

如何在Oreo中注冊Broadcast Receiver for media按鈕?

[英]How register Broadcast Receiver for media button in Oreo?

我有新的Android版本的問題,即8.0(奧利奧)。 我必須注冊廣播,我使用以下代碼執行此操作:

// 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。

IG

    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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM