我试图按照谷歌的谈话实施媒体按钮控制
我将接收器设置为清单:
创建MediaSessionCompat
于onCreate()
服务:
mediaSession = new MediaSessionCompat(getApplicationContext(), "SOUNDPROCESS"); mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); PlaybackStateCompat ps = new PlaybackStateCompat.Builder() .setActions(PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_PLAY_PAUSE) .build(); mediaSession.setPlaybackState(ps); mediaSession.setCallback(new MediaSessionCompat.Callback() { @Override public void onPlay() { ... } });
并处理意图 onStartCommand()
MediaButtonReceiver.handleIntent(mediaSession, intent);
然后,setActive(true);
当我获得音频焦点时,然后setActive(false);
当我停止播放时,我会打电话.这是第一次,我的应用程序成为首选媒体按钮接收器并接收回调.
但是,如果我在我的应用程序中停止播放,请进入另一个应用程序,如Google Play音乐并开始在那里播放,然后返回我的应用程序并调用setActive(true)
Google Play音乐继续接收回调,媒体按钮在我的应用中无效.
根据我的理解,最后一次调用setActive(true)
应优先考虑.我已经确认isActive()
返回true.我也可以通过MediaSessionCompat
每次创建一个新的方法解决这个问题,但这似乎并不理想.
每次打电话时,如何让我的应用程序成为首选的媒体按钮接收器setActive(true)
?
更新:此处重现问题的最小项目:https://github.com/svenoaks/MediaButtonDemo.git
重现步骤:
运行应用程序,按PLAY按钮.setActive(true)
被调用,MediaButtonReceiver现在是首选的媒体按钮.
按有线或无线耳机或其他媒体按钮上的播放/暂停按钮.Toast显示回调正在运行.
在支持媒体按钮的Google Play音乐等其他应用上开始播放.按此应用程序暂停.
演示应用程序不再是首选的媒体按钮接收器,即使再次按下PLAY按钮,再次呼叫setActive(true)
.另一个应用程序始终响应媒体按钮.
这是在Android 6.0上测试的.