android - MediaRouteButton 在 Fragment 中未激活
问题描述
我使用按钮android.support.v7.app.MediaRouteButton
在我的应用程序中的活动 xml 和带有视频播放器的片段 xml 中启动 chromecast。
为了初始化投射按钮,我使用下一个代码:
private void setupChromeCast() {
try {
CastButtonFactory.setUpMediaRouteButton(getActivity(), castButton);
castContext = CastContext.getSharedInstance(getActivity());
castSession = castContext.getSessionManager().getCurrentCastSession();
onCastStateChanged(castContext.getCastState());
castSessionManager = new CastSessionManager(this);
isChromeCastAvailable = true;
} catch (Exception e) {
isChromeCastAvailable = false;
}
}
它在活动中运行良好。我的意思是,当 chromecast 设备靠近时,我的 MediaRouteButton 会变为活动状态,我可以按下它。但是当这个 Button 在 Fragment 上时,它不会变为活动状态。并回调
@Override
public void onCastStateChanged(int state)
不打电话。那么,如何修复这个错误呢?还有一个有趣的时刻:当我在片段中时,按钮不活动,但是当我将我的应用程序隐藏到后台,然后打开到前台时,我的 mediaroutebutton 变为活动状态。它太奇怪了。
解决方案
在您的活动中,初始化Cast
:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CastContext.getSharedInstance(this);
}
然后在您的片段中,您可以掌握Cast
上下文:
@Override
public void onResume() {
super.onResume();
CastContext cc = CastContext.getSharedInstance();
cc.addCastStateListener(this);
cc.getSessionManager().addSessionManagerListener(
this, CastSession.class);
}
已通过 Cast 版本验证18.1.0
。
推荐阅读
- flutter - Google 地方自动填充功能无法正常工作
- npm - 呃!错误号 ETIMEDOUT
- mysql - WinNMP 升级 MariaDB 到 MySQL
- android - 如何使 HTML 文件输入仅选择移动设备上的文档格式?
- arrays - 在数组中查找最后出现的匹配条件
- react-native - 我可以使用 FileSystem 将 pdf 文件下载到 expo 的本地设备吗?
- reactjs - 如何使用 ReactJS 应用程序开发和测试 Firebase 可调用函数?
- amazon-web-services - 过滤加载到 Redshift 中的数据
- javascript - ESLint:可能的竞争条件:`user.registered` 可能会根据 `user.registered` 的过时值重新分配。(需要原子更新)
- c# - 如何使用 MS Graph 将 Azure 门户注册的应用程序限定为只能访问 sharepoint 中的特定日历