android - MediaBrowser 未连接到 MediaBrowserService
问题描述
我正在尝试使用 MediaBrowser 从活动连接到 MediaBrowserService。但是,我的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
oronConnectionFailed
方法。connect
调用后,checkedisConnected
返回 false。
我不确定如何进一步调试,因为问题发生在连接过程中的某个地方,并且据我所知,我的代码符合 Android 示例指南。setSessionToken
是的,我正在调用onCreate
浏览器服务。
如果我尝试在我的活动中设置 MediaController onStart
,在我调用之后connect
,我会收到一个异常,指出浏览器未连接,因此无法设置会话令牌。因此,尽管执行进入onCreate
我的服务,但连接没有完成。
解决方案
我发现了这个错误。我在StreamingService
( MediaBrowserServiceCompat
) 类中重写了以下方法:
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
完全删除该方法允许连接发生。
推荐阅读
- javascript - 从 cv::normalize 接收错误“表达式的类型为 v128 但预期为 i32”
- android - 如何阻止用户在android中拖动状态栏
- c# - AxAXVLC .NET 插件在 1 fps 视频的第一帧处冻结
- swift - QLPreviewController 显示文件然后在 SwiftUI 中变为空白
- javascript - 错误组件无法在本机反应中导航
- batch-file - 如何在cmd中读取文件
- c++ - 使用成员初始化器列表初始化类对象的引用变量?
- javascript - 从 Angular PrimeNG 中的 P-Table 获取 .TS 中的 Paginator 对象
- flutter - 如何从渐变中发回boxShadow?
- python - 文件“stringsource”,在 spacy.pipeline.pipe.Pipe.__setstate_cython__ TypeError: Expected tuple, got dict