Служба потокового вещания работает через MediaBrowserService в режиме ожидания - PullRequest
0 голосов
/ 09 марта 2020

Я работаю над потоковым приложением Android с использованием MediaBrowserServiceCompat на основе этой замечательной статьи https://medium.com/androiddevelopers/mediabrowserservicecompat-and-the-modern-media-playback-app-7959a5196d90. Мое приложение работает довольно хорошо, за исключением случаев, когда телефон переходит в режим ожидания. Я просматривал inte rnet и вижу некоторые возможные решения, чтобы поддержать мой сервис. Одним из них является запуск пользовательского интерфейса и службы Musi c в разных процессах. Однако, поскольку я использую MediaBrowserService, я не знаю, как запустить службу из пользовательского интерфейса, используя AIDL.

Так я подключил службу к основному действию в одном и том же процессе:

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");
}

Кто-нибудь знает, как это сделать, или есть другое надежное решение для поддержки потоковой передачи?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...