Android RegisterMediaButtonVentreceiver替代设置MediaButtonReceiver(挂起mbr)不工作

Android RegisterMediaButtonVentreceiver替代设置MediaButtonReceiver(挂起mbr)不工作,android,android-intent,android-activity,android-mediaplayer,android-audiomanager,Android,Android Intent,Android Activity,Android Mediaplayer,Android Audiomanager,在按下耳机时,需要将我的应用程序带到前台。为此,我使用registerDiaButtoneVentReceiver()方法,对于低于android操作系统5.1的设备,它可以正常工作。现在,此方法在API级别21中已被弃用。我正在使用mediasession.setMediaButtonReciever()来提高优先级,但它不起作用 AudioManager mAudioManager = (AudioManager) context.getSystemService(Context.AUDI

在按下耳机时,需要将我的应用程序带到前台。为此,我使用registerDiaButtoneVentReceiver()方法,对于低于android操作系统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);
我每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);

您还必须设置一个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);

我已经看到Google Play Music能够接收耳机按钮事件并开始播放,即使应用程序完全停止且没有后台服务运行。你知道怎么做吗?我在这里提问是因为我认为可以通过MediaSession.setMediaButtonReceiver()实现,但如果应用程序未运行,PlaybackState将在哪里发挥作用?最佳做法是在应用程序完成播放或活动或服务被破坏时释放媒体会话。我不知道Google Play Music在这种情况下的表现如何,但我注意到GPM以及供应商的音乐应用程序(如LG的音乐应用程序)在开机时启动了一项服务。我认为该服务是对媒体按钮按下做出反应的组件。如何检查GPM后台服务是否正在运行?谢谢回复。我通过进入“应用>下载>谷歌音乐播放>强制停止”确保没有任何组件运行,然后按下耳机按钮。它自己又打开了。好吧,我注意到当你用强制停止“杀死”一个应用程序时,如果该应用程序有一个后台android服务,这个服务会被系统自动重启(我不知道确切的行为)。我认为您正处于这种情况:强制停止GPM>系统自动重新启动GPM服务>按下按钮>GPM对按钮作出反应我在谷歌Android和Cyanogenmod上测试了GPM,发现它们在这些平台上的行为不同。我会进一步研究。无论如何,谢谢你的回复!