https://developers.google.com/cast/cast_2nd-screen_app_tutorial上的示例显示调用onDestroy
的{{1}}方法。这会导致调用unregisterMediaRouteProvider
方法,从而结束会话。这导致应用与Chromecast设备断开连接,MediaRouter.Callback.onRouteUnselected
停止为蓝色。以下是示例中的MediaRouteButton
方法:
onDestroy
所以我的问题是,在应用程序中使用chromecast设备时,处理屏幕旋转的正确方法是什么?
答案 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的连接。