【问题标题】:Custom Receiver fails to launch correctly自定义接收器无法正确启动
【发布时间】:2015-03-20 02:31:55
【问题描述】:

当我从我的 Sender 应用程序连接到 CC 设备时,自定义接收器通常无法正常启动。

它会加载,但永远不会处于就绪状态。

这是 logcat 的输出:

01-21 14:16:09.603  19396-19396/com.example.chromecast D/PlayActivity onRouteSelected
01-21 14:16:16.913  19396-19396/com.example.chromecast D/PlayActivity onConnected
01-21 14:16:16.953  19396-19396/com.example.chromecast D/ccl_BaseCastManager﹕ [v1.11] onConnected() reached with prior suspension: false
01-21 14:16:16.953  19396-19396/com.example.chromecast D/ccl_BaseCastManager﹕ [v1.11] launchApp() is called
01-21 14:16:16.953  19396-19396/com.example.chromecast D/ccl_BaseCastManager﹕ [v1.11] Launching app
01-21 14:16:17.003  19396-19396/com.example.chromecast D/ccl_DataCastManager﹕ [v1.11] onApplicationStatusChanged() reached:
01-21 14:16:19.513  19396-19396/com.example.chromecast D/ccl_DataCastManager﹕ [v1.11] onApplicationStatusChanged() reached: null
01-21 14:16:20.633  19396-19396/com.example.chromecast D/ccl_BaseCastManager﹕ [v1.11] launchApplication() -> failure result
01-21 14:16:20.633  19396-19396/com.example.chromecast D/ccl_BaseCastManager﹕ [v1.11] disconnectDevice(true,false)
01-21 14:16:20.633  19396-19396/com.example.chromecast D/ccl_BaseCastManager﹕ [v1.11] mConnectionSuspended: false
01-21 14:16:20.633  19396-19396/com.example.chromecast D/ccl_BaseCastManager﹕ [v1.11] clearPersistedConnectionInfo(): Clearing persisted data for 0
01-21 14:16:20.653  19396-19396/com.example.chromecast D/ccl_BaseCastManager﹕ [v1.11] onDisconnected() reached
01-21 14:16:20.653  19396-19396/com.example.chromecast D/ccl_BaseCastManager﹕ [v1.11] Trying to disconnect
01-21 14:16:37.295  19396-19396/com.example.chromecast D/PlayActivity ApplicationConnectionResultCallback.onResult: statusCode15
01-21 14:16:37.295  19396-19396/com.example.chromecast E/PlayActivity application could not launch
01-21 14:16:37.295  19396-19396/com.example.chromecast D/PlayActivity teardown

如果我在我的 Sender 应用中断开连接,然后重新连接,Receiver 将进入就绪状态,我可以投射我的内容。

什么会导致这种行为? (这种情况发生的频率更高,而且非常令人沮丧!)

一些代码:

(媒体路由初始化)

mMediaRouter = MediaRouter.getInstance(getApplicationContext());
    mMediaRouteSelector = new MediaRouteSelector.Builder()
            .addControlCategory(
                    CastMediaControlIntent.categoryForCast(getResources()
                            .getString(R.string.app_id))).build();
    mMediaRouterCallback = new MyMediaRouterCallback();

    mDataCastManager = DataCastManager.initialize(this, getResources().getString(R.string.app_id), getResources().getString(R.string.namespace));
    mDataCastManager.reconnectSessionIfPossible(this, true, 20);

媒体路由按钮

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
    MediaRouteActionProvider mediaRouteActionProvider = (MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem);
    mediaRouteActionProvider.setRouteSelector(mMediaRouteSelector);

    return super.onCreateOptionsMenu(menu);
}

回调

private class MyMediaRouterCallback extends MediaRouter.Callback {

    @Override
    public void onRouteSelected(MediaRouter router, MediaRouter.RouteInfo info) {
        Log.d(TAG, "onRouteSelected");
        // Handle the user route selection.
        mSelectedDevice = CastDevice.getFromBundle(info.getExtras());

        launchReceiver();
    }

    @Override
    public void onRouteUnselected(MediaRouter router, MediaRouter.RouteInfo info) {
        Log.d(TAG, "onRouteUnselected: info=" + info);
        teardown();
        mSelectedDevice = null;
    }
}

如您所见,我的大部分实现来自 CastHelloText Android 示例应用程序。我已在 CCL 库中添加以实现轻松的会话管理,但我认为这是导致问题的原因。

在连接 CC 设备进行投射时,注释掉 DataCastManager 似乎会提供更好的结果。

【问题讨论】:

  • 一些代码怎么样?

标签: java android chromecast


【解决方案1】:

如果您使用的是 CCL,请停止管理媒体路由器按钮、媒体路由器的直接回调、启动接收器等,因为这些都是由 CCL 处理的。如果你想自己做这些事情,那就停止使用 CCL;您目前正在以错误的方式混合两种不同的东西。阅读 CCL 上的文档会很有帮助。

【讨论】:

  • 如果文档不仅仅集中在视频投射方面,那就太好了。我不知道我是否应该使用 CCL。我错误地认为我可以只使用它的一部分。您能否提供一些示例代码,说明我应该如何使用 CCL 代替默认的 Cast SDK 实现?
  • 如果您阅读了文档,您会注意到它确实也谈到了 DataCastManager(因此它不仅仅是关于视频投射)。我没有使用 DataCastManager 的示例。
  • 我正在专门寻找 DataCastManager 示例。
  • 正如我所说,我们没有,但看不出如果您按照文档操作会遇到问题;您初始化它,您在 onCreateOptionsMenu() 中设置您的媒体路由操作提供程序(与您为 VideoCastManager 所做的相同)并将 incrementUi/decrementUi 添加到您的 onResume()/onPause() 中,这应该足以获得相关的连接东西启动并运行。
猜你喜欢
  • 2017-03-19
  • 2020-03-21
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
相关资源
最近更新 更多