MediaBrowser не подключается к MediaBrowserService - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь подключиться к 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 возвращает false.

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

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

1 Ответ

0 голосов
/ 14 мая 2018

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

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

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

...