registerMediaButtonEventReceiver 替代 setMediaButtonReceiver (PendingIntent mbr) 不起作用

Gop*_*hna 5 android android-intent android-mediaplayer android-activity android-audiomanager

在按下耳机时需要将我的应用程序带到前台为此我使用 registerMediaButtonEventReceiver() 方法,它在 android os 5.1 以下设备上工作正常。现在此方法在 API 级别 21 中已弃用。我正在使用 mediasession.setMediaButtonReciever() 来获得高优先级,但它不起作用。

AudioManager mAudioManager  = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        ComponentName mediaComponent = new ComponentName(context.getPackageName(), HeadsetReceiver.class.getName());
        mAudioManager.registerMediaButtonEventReceiver(mediaComponent);
        mediaHandler.postDelayed(this, 1000L);
Run Code Online (Sandbox Code Playgroud)

我每 1 秒发布一次以获取我的优先应用程序。我在 5.1 中使用此代码,但按下媒体按钮音乐开始。我的应用程序没有收到任何将应用程序带到前台的事件。提前致谢..

 MediaSession mSession =  new MediaSession(context,context.getPackageName());
        Intent intent = new Intent(context, HeadsetReceiver.class);
        PendingIntent pintent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        mSession.setMediaButtonReceiver(pintent);
        mSession.setActive(true);
        mediaHandler.postDelayed(this, 1000L);
Run Code Online (Sandbox Code Playgroud)

DSo*_*ldo 3

您还必须像这样设置 PlaybackState:

PlaybackState state = new PlaybackState.Builder()
                        .setActions(PlaybackStateCompat.ACTION_FAST_FORWARD | PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_SKIP_TO_NEXT | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS | PlaybackStateCompat.ACTION_STOP)
                        .setState(PlaybackStateCompat.STATE_PLAYING, 0, 1, SystemClock.elapsedRealtime())
                        .build();
mSession.setPlaybackState(state);
Run Code Online (Sandbox Code Playgroud)