我有一個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()運行良好並修復了這個問題(我不知道爲什麼我第一次沒有得到它:這是一個綁定的服務,如果沒有連接它,它就會死掉) –