0

我正在根据这篇很棒的文章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");
}

任何人都知道如何做到这一点,或者是否有任何其他可靠的解决方案来保持流媒体的活力?

谢谢

4

0 回答 0