+-
android – 每次运行时更改都会重新创建MediaBrowserServiceCompat实例
我有一个服务使用新的MediaBrowserServiceCompat来与我的Player实现进行交互.

这是我的服务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());
}

然后我在我的Activity中访问我的MediaBrowserCompat:

@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()时,都会在调用mediaBrowser.disconnect()时创建并终止我的服务.

问题是当重新创建MediaSessionCompat时,我丢失了我创建的任何元数据或者我可能保存的播放状态.

这是应该的样子还是mm我做错了?

此外,如果它应该是这样的意思是我必须在某处保存我的元数据并在每次创建新的MediaSessionCompat对象时调用MediaSessionCompat.setMetadata()?还是有更有效的解决方案?

谢谢

最佳答案
如 MediaBrowserService and the modern media playback app blog中所述:

this wraps the API for 07001, which makes sense since we’re trying to connect to a Service.

绑定服务的生命周期直接绑定到绑定到服务的人:

When the last client unbinds from the service, the system destroys the service (unless the service was also started by startService()).

在您的情况下,服务将不再有任何人在onDestroy()和onCreate()之间绑定它.

Universal Android Music Player’s MusicService的例子是:

>在播放开始时调用startService(new Intent(this,MediaPlaybackService.class))
>停止播放时调用stopSelf()

这可确保绑定客户端中的更改不会导致服务在播放过程中被销毁.

点击查看更多相关文章

转载注明原文:android – 每次运行时更改都会重新创建MediaBrowserServiceCompat实例 - 乐贴网