https://developers.google.com/cast/cast_2nd-screen_app_tutorial上的示例显示了一个调用unregisterMediaRouteProvider的onDestroy方法。这会导致调用MediaRouter.Callback.onRouteUnselected方法,从而结束会话。这会导致应用程序与chromecast设备断开连接,MediaRouteButton也不再呈蓝色。下面是示例中的onDestroy方法:
@Override
protected void onDestroy() {
MediaRouteHelper.unregisterMediaRouteProvider(mCastContext);
mCastContext.dispose();
super.onDestroy();
}所以我的问题是,在应用程序中使用chromecast设备时,处理屏幕旋转的正确方式是什么?
发布于 2014-01-09 14:51:19
您可以尝试使用Activity的isFinishing()方法来确定调用onDestroy是由于应用程序真正的“完成”,还是由于其他原因。另一种选择是自己处理方向更改。
发布于 2014-09-22 00:36:17
您可以在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覆盖,也没有在我链接的谷歌文档中提到它。但是我使用我链接到的文档中描述的teardown()方法进行清理,但这只在我关闭连接时发生,因为我不想在方向改变时关闭到chromecast的连接。
https://stackoverflow.com/questions/21002092
复制相似问题