我有一个Service
使用新的MediaBrowserServiceCompat
与我的播放器实现进行交互。MediaBrowserServiceCompat实例每次运行时更改都会重新创建
这里是我服务的onCreate()
@Override
public void onCreate() {
super.onCreate();
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
initMediaSession();
initMediaPlayer();
}
和我initMediaSession()
private void initMediaSession() {
Log.d(TAG, "initMediaSession: ");
mediaSessionCompat = new MediaSessionCompat(getApplicationContext(), TAG);
mediaSessionCompat.setCallback(new MediaSessionCompat.Callback() {
// I override the methods here
});
mediaSessionCompat.setActive(true);
// Method from MediaBrowserServiceCompat
setSessionToken(mediaSessionCompat.getSessionToken());
}
然后访问我MediaBrowserCompat
在我Activity
:
@Override
public void onCreate() {
mediaBrowser = new MediaBrowserCompat(this, new ComponentName(this, MediaPlaybackService.class), mediaBrowserConnectionCallback, null);
mediaBrowser.connect();
}
// I do stuff here
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaBrowser != null) {
mediaBrowser.disconnect();
}
}
每次mediaBrowser.connect()
被调用时创建我的服务和ki当调用mediaBrowser.disconnect()
时被调用。
问题是什么时候MediaSessionCompat
重新创建我失去了我创建的任何元数据或我可能保存的播放状态。
它应该是这样或者我做错了吗?
另外如果它应该是这样,是否意味着我必须将我的元数据保存到某个地方,并且每次创建新的MediaSessionCompat
对象时都要调用MediaSessionCompat.setMetadata()
?还是有更高效的解决方案?
谢谢
谢谢@ianhanniballake!调用startService()和stopSe lf()运行良好并修复了这个问题(我不知道为什么我第一次没有得到它:这是一个绑定的服务,如果没有连接它,它就会死掉) –