Ste*_*e M 11 android android-mediasession
我试图按照谷歌的谈话实施媒体按钮控制
我将接收器设置为清单:
<receiver android:name="android.support.v4.media.session.MediaButtonReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
<service android:name=".player.PlayFileService">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
创建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() { ...
}
});
Run Code Online (Sandbox Code Playgroud)
并处理意图 onStartCommand()
MediaButtonReceiver.handleIntent(mediaSession, intent);
Run Code Online (Sandbox Code Playgroud)
然后,setActive(true);当我获得音频焦点时,然后setActive(false);当我停止播放时,我会打电话.这是第一次,我的应用程序成为首选媒体按钮接收器并接收回调.
但是,如果我在我的应用程序中停止播放,请进入另一个应用程序,如Google Play音乐并开始在那里播放,然后返回我的应用程序并调用setActive(true)Google Play音乐继续接收回调,媒体按钮在我的应用中无效.
根据我的理解,最后一次调用setActive(true)应优先考虑.我已经确认isActive()返回true.我也可以通过MediaSessionCompat每次创建一个新的方法解决这个问题,但这似乎并不理想.
每次打电话时,如何让我的应用程序成为首选的媒体按钮接收器setActive(true)?
更新:此处重现问题的最小项目:https://github.com/svenoaks/MediaButtonDemo.git
重现步骤:
setActive(true)被调用,MediaButtonReceiver现在是首选的媒体按钮.setActive(true)
.另一个应用程序始终响应媒体按钮.这是在Android 6.0上测试的.
使其正常工作的关键是在PlaybackState每次应用程序开始播放或暂停时正确设置(当另一个应用程序获得音频会话并激活自己的时应该执行此操作)。MediaSession如果没有这个,就会发生上述问题。另外,对于Android 4.4及更低版本, FLAG_HANDLES_TRANSPORT_CONTROLS必须进行设置,否则会发生同样的问题。
| 归档时间: |
|
| 查看次数: |
1076 次 |
| 最近记录: |