我有一个Service
使用新功能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());
}
然后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()
调用时,我的服务都会在mediaBrowser.disconnect()
调用时创建并杀死。
问题是MediaSessionCompat
重新创建时,我会丢失创建的任何元数据或可能保存的播放状态。
是应该的样子还是我做错了?
另外,如果应该那样做,是否意味着我必须将元数据保存在某个地方,并在MediaSessionCompat.setMetadata()
每次创建新MediaSessionCompat
对象时重新调用?还是有更有效的解决方案?
谢谢
如MediaBrowserService和现代媒体播放应用程序博客中所述:
这包装了绑定服务的API ,这很有意义,因为我们正在尝试连接到服务。
绑定服务的生命周期与绑定到该服务的人员直接相关:
当最后一个客户端与服务解除绑定时,系统将销毁该服务(除非该服务也由startService()启动)。
在您的情况下,该服务将不再在onDestroy()和onCreate()之间绑定任何人。
的例子通用的Android音乐播放器的MusicService是:
这样可以确保绑定客户端中的更改不会导致服务在播放过程中被破坏。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句