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