处理屏幕旋转和媒体路由按钮以及现有会话的正确方法是什么?

时间:2014-01-08 17:09:05

标签: google-cast chromecast

https://developers.google.com/cast/cast_2nd-screen_app_tutorial上的示例显示调用onDestroy的{​​{1}}方法。这会导致调用unregisterMediaRouteProvider方法,从而结束会话。这导致应用与Chromecast设备断开连接,MediaRouter.Callback.onRouteUnselected停止为蓝色。以下是示例中的MediaRouteButton方法:

onDestroy

所以我的问题是,在应用程序中使用chromecast设备时,处理屏幕旋转的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用Activity的isFinishing()方法来确定是否由于应用程序真正“完成”而调用onDestroy,或者出于其他原因调用onDestroy。另一种选择是自己处理方向变化。

答案 1 :(得分:0)

您可以在https://developers.google.com/cast/docs/android_sender

上查看处理Chromecast设置/销毁的指南(例如,何时发生方向更改)

相关的代码部分如下:

@Override
protected void onResume() {
   super.onResume();
   mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback,
   MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
}

@Override
protected void onPause() {
   if (isFinishing()) {
   mMediaRouter.removeCallback(mMediaRouterCallback);
   }
super.onPause();
}

还有以下代码:

@Override
protected void onStart() {
  super.onStart();
  mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback,
  MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
}

@Override
protected void onStop() {
   mMediaRouter.removeCallback(mMediaRouterCallback);
   super.onStop();
}

在程序中使用布尔值也是一个好主意,例如“wasLaunched”或“isConnected”以跟踪与chromecast的连接是否处于活动状态。我在我的代码中使用这个变量来检查我是否可以向接收者发送消息。然后,只需记住保存此变量,并在设备上更改方向时将其恢复。这适用于我启用了chromecast的应用。保存/恢复我的变量的代码,因此它改变了方向更改如下所示:

protected void onSaveInstanceState(Bundle bundle) {     
    if (bundle!=null)
    {
        bundle.putBoolean("wasLaunched", wasLaunched);
    }
    super.onSaveInstanceState(bundle);  
}

protected void onRestoreInstanceState(Bundle savedInstanceState) {
    if (savedInstanceState!=null)
    {
        wasLaunched = savedInstanceState.getBoolean("wasLaunched");
    }
    super.onRestoreInstanceState(savedInstanceState);
};

当然,您也可以将其他内容放入需要在方向更改中生存的捆绑包中。我没有使用你在那里描述的onDestroy覆盖,也没有在我链接到的google文档中提到它。但我使用我链接到的文档中描述的teardown()方法进行清理,但这只发生在我关闭连接时,因为我不希望在方向更改时关闭与chromecast的连接。