我正在尝试使用一个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中有执行,但是连接还没有完成。
发布于 2018-05-14 12:20:11
我找到窃听器了。我在StreamingService (MediaBrowserServiceCompat)类中重写了以下方法:
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}完全删除该方法可使连接发生。
https://stackoverflow.com/questions/50319923
复制相似问题