MediaBrowser не подключается к MediaBrowserService

Я пытаюсь подключиться к MediaBrowserService из действия с использованием MediaBrowser. Тем не менее, мой onConnected обратный вызов никогда не вызывается, чтобы позволить мне настроить MediaController и начать манипулировать воспроизведением.

В моей деятельности игрока / браузера:

private final MediaBrowserCompat.ConnectionCallback mConnectionCallback =
            new MediaBrowserCompat.ConnectionCallback() {
                @Override
                public void onConnected() {
                    try {
                        mMediaController =
                                new MediaControllerCompat(
                                        PlayActivity.this,
                                        mMediaBrowser.getSessionToken()
                                );

                        mMediaController.registerCallback(mControllerCallback);

                        mControllerCallback
                                .onMetadataChanged(mMediaController.getMetadata());
                        mControllerCallback
                                .onPlaybackStateChanged(mMediaController.getPlaybackState());
                    } catch (RemoteException e) {
                        throw new RuntimeException(e);
                    }

                    mMediaController
                            .getTransportControls()
                            .prepareFromUri(
                                    Uri.parse(
                                            getIntent()
                                                    .getStringExtra(StreamingService.STREAM_URI)),
                                    getIntent().getExtras());

                    mMediaController
                            .getTransportControls().play();

                    buildTransportControls();
                }

                @Override
                public void onConnectionSuspended() { }

                @Override
                public void onConnectionFailed() { }
            };

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play);
        setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
        Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);

        mMediaBrowser = new MediaBrowserCompat(this,
                new ComponentName(this, StreamingService.class),
                mConnectionCallback,
                null);
    }

    @Override
    public void onStart() {
        super.onStart();
        mMediaBrowser.connect();
    }

Я добавил точки останова с помощью отладчика, и кажется, что выполнение достигает службы, до конца ее onCreate метод, но исполнение никогда не достигает ни onConnected или же onConnectionFailed методы моего соединения обратного вызова. После connect называется, проверено isConnected возвращает ложь

Я не уверен, как отлаживать дальше, поскольку проблема возникает где-то во время процесса подключения, и насколько я могу судить, мой код соответствует руководствам примеров Android. И да, я звоню setSessionToken в onCreate службы браузера.

Если я попытаюсь настроить MediaController в onStart моей деятельности, после того как я позвоню connect, Я получаю исключение, утверждающее, что браузер не подключен и поэтому маркер сеанса не может быть установлен. Так что, хотя исполнение идет в onCreate моего сервиса, соединение не завершено.

1 ответ

Я нашел ошибку. Я переопределил следующий метод в моем StreamingService (MediaBrowserServiceCompat) учебный класс:

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

Удаление метода полностью позволяет установить соединение.

Другие вопросы по тегам