我正在根据这篇很棒的文章https://medium.com/androiddevelopers/mediabrowserservicecompat-and-the-modern-media-playback-app-7959a5196d90使用 MediaBrowserServiceCompat 开发 Android 流媒体应用程序。我的应用程序运行良好,除非手机进入打盹模式。我一直在寻找互联网,并看到一些可能的解决方案来保持我的服务活力。其中之一是在不同的进程中运行 UI 和音乐服务。但是,由于我使用的是 MediaBrowserService,我不知道如何使用 AIDL 从 UI 启动服务。
这就是我在同一进程中将服务与 Main Activity 连接起来的方式:
MainActivity.java
private class MediaBrowserConnection extends MediaBrowserHelper {
private MediaBrowserConnection(Context context) {
super(context, MusicService.class);
}
@Override
protected void onConnected(@NonNull MediaControllerCompat mediaController) {
mMediaController = mediaController;
}
@Override
protected void onChildrenLoaded(@NonNull String parentId,
@NonNull List<MediaBrowserCompat.MediaItem> children) {
super.onChildrenLoaded(parentId, children);
}
}
MediaBrowserHelper.java
public MediaBrowserHelper(Context context,
Class<? extends MediaBrowserServiceCompat> serviceClass) {
mContext = context;
mMediaBrowserServiceClass = serviceClass;
mMediaBrowserConnectionCallback = new MediaBrowserConnectionCallback();
mMediaControllerCallback = new MediaControllerCallback();
mMediaBrowserSubscriptionCallback = new MediaBrowserSubscriptionCallback();
}
public void onStart() {
if (mMediaBrowser == null) {
mMediaBrowser =
new MediaBrowserCompat(
mContext,
new ComponentName(mContext, mMediaBrowserServiceClass),
mMediaBrowserConnectionCallback,
null);
mMediaBrowser.connect();
}
Log.d(TAG, "onStart: Creating MediaBrowser, and connecting");
}
public void onStop() {
if (mMediaController != null) {
mMediaController.unregisterCallback(mMediaControllerCallback);
mMediaController = null;
}
if (mMediaBrowser != null && mMediaBrowser.isConnected()) {
mMediaBrowser.disconnect();
mMediaBrowser = null;
}
resetState();
Log.d(TAG, "onStop: Releasing MediaController, Disconnecting from MediaBrowser");
}
任何人都知道如何做到这一点,或者是否有任何其他可靠的解决方案来保持流媒体的活力?
谢谢