gpt4 book ai didi

android - Chromecast 按钮仅在应用后台运行后出现

转载 作者:行者123 更新时间:2023-11-29 00:51:47 39 4
gpt4 key购买 nike

非常简单的情况。将 Chromecast 按钮添加到 toolbar。首次启动应用程序时,该按钮不会出现。当我将应用程序置于后台,然后再次将其置于前台时,会出现该按钮。是的,同一 wifi 网络上有一个可转换设备。

MyFragment.kt

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {

inflater.inflate(R.menu.toolbar_menu, menu)

CastButtonFactory
.setUpMediaRouteButton(context?.applicationContext, menu, R.id.media_route_menu_item)

return super.onCreateOptionsMenu(menu, inflater)
}

工具栏菜单.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
android:id="@+id/media_route_menu_item"
android:title="@string/media_route_menu_title"
app:actionProviderClass="androidx.mediarouter.app.MediaRouteActionProvider"
app:showAsAction="always" />
</menu>

似乎应该这样做。我有具有正确接收器 ID 的 CastOptionsProvider 类设置。这是一个调试版本,因此没有混淆器。

请注意,该按钮最终会出现,但只有在我将应用置于背景/前景之后。我可以等 10 分钟,但什么也没有发生。但是如果我背景/前景,按钮立即可见。

编辑:
非常感谢@fllo 的回答。他的建议比最终要求的要多一些,所以我想为其他人澄清一下。

我发布的代码很好。我所缺少的只是在 Activity 的 onCreate() 中初始化 CastContext。如果我刚刚考虑过,那就完全有道理了。

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
CastContext.getSharedInstance(this)
}

就这样吧。简单的解决方案。希望对某人有所帮助。

最佳答案

您需要确保在创建 Fragment 实例之前初始化 Cast SDK。

移动 Cast SDK 初始化代码( CastButtonFactory with setUpMediaRouteButton()CastStateListenerIntroductoryOverlay )进入父 Activity 将按预期工作。然后,也许只是默认隐藏 MenuItem 并从 Fragment 中显示它就可以了。

根据 the documentation , MediaRouteButton 应该在 FragmentActivity 中。我的猜测是回调不是从 Fragment 调用的,那么它的可见性不会动态改变。因此,您需要在收到更新时将其从 Activity 中转换并向下传递到 Fragment。不是很优雅,但应该可以。

关于android - Chromecast 按钮仅在应用后台运行后出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58884569/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com