【问题标题】:MediaBrowser not connecting to MediaBrowserServiceMediaBrowser 未连接到 MediaBrowserService
【发布时间】:2018-05-13 19:34:54
【问题描述】:

我正在尝试使用 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 方法结束,但执行似乎从来没有到达我连接的 onConnectedonConnectionFailed 方法打回来。调用connect 后,检查isConnected 返回false。

我不确定如何进一步调试,因为问题发生在连接过程中的某个地方,而且据我所知,我的代码符合 Android 示例指南。是的,我在浏览器服务的onCreate 中调用setSessionToken

如果我尝试在我的活动的onStart 中设置 MediaController,在我调用connect 之后,我会收到一个异常,指出浏览器未连接,因此无法设置会话令牌。因此,虽然执行到我的服务的onCreate,但连接没有完成。

【问题讨论】:

    标签: android android-activity foreground-service mediabrowserservice mediabrowser


    【解决方案1】:

    我发现了错误。我在 StreamingService (MediaBrowserServiceCompat) 类中重写了以下方法:

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

    完全删除该方法允许连接发生。

    【讨论】:

    • 你有解释为什么会这样吗?如果您有另一个片段绑定到服务,但仍希望从另一个地方进行控制,该怎么办?
    • 将服务绑定到活动时不起作用!
    猜你喜欢
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2018-03-24
    • 2015-09-28
    • 2019-04-29
    • 2021-02-04
    相关资源
    最近更新 更多