首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理屏幕旋转、媒体路由按钮和现有会话的正确方式是什么?

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

Stack Overflow用户
提问于 2014-01-09 01:09:05
回答 2查看 371关注 0票数 2

https://developers.google.com/cast/cast_2nd-screen_app_tutorial上的示例显示了一个调用unregisterMediaRouteProvideronDestroy方法。这会导致调用MediaRouter.Callback.onRouteUnselected方法,从而结束会话。这会导致应用程序与chromecast设备断开连接,MediaRouteButton也不再呈蓝色。下面是示例中的onDestroy方法:

代码语言:javascript
复制
@Override
protected void onDestroy() {
    MediaRouteHelper.unregisterMediaRouteProvider(mCastContext);
    mCastContext.dispose();
    super.onDestroy();
}

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

EN

回答 2

Stack Overflow用户

发布于 2014-01-09 14:51:19

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

票数 1
EN

Stack Overflow用户

发布于 2014-09-22 00:36:17

您可以在https://developers.google.com/cast/docs/android_sender上看到处理Chromecast设置/销毁的指南(例如,当发生方向更改时

代码的相关部分如下:

代码语言:javascript
复制
@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();
}

还有下面的代码:

代码语言:javascript
复制
@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的应用程序中适用。保存/恢复变量的代码如下所示:

代码语言:javascript
复制
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的连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21002092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档