非常简单的情况。在上添加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)
}
工具栏_menu.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>
似乎应该这样做。我的CastOptionsProvider
班级设置带有正确的接收者ID。这是一个调试版本,因此没有proguard。
请注意,该按钮最终会出现,但仅在我后台/前景化该应用程序之后。我可以等待10分钟,什么也没发生。但是,如果我是背景/前景,则该按钮立即可见。
编辑:
非常感谢@fllo的答案。他的建议比最终需要的要多,所以我想为他人澄清。
我发布的代码很好。我所缺少的只是在中的onCreate()中初始化CastContext Activity
。如果我刚刚考虑过,那将是非常合理的。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
CastContext.getSharedInstance(this)
}
就是这样了。简单的解决方案。希望它能帮助某人。
您需要确保在创建Fragment实例之前初始化Cast SDK。
将Cast SDK初始化代码(带有setUpMediaRouteButton()的CastButtonFactory,CastStateListener和IntroductoryOverlay)移到父Activity中将按预期工作。然后,也许只是默认情况下隐藏MenuItem并从Fragment中显示它即可解决问题。
根据文档,MediaRouteButton应该在FragmentActivity中。我的猜测是,不是从Fragment调用回调,因此,其可见性不会动态变化。因此,您将需要从“活动”中将其强制转换,并在接收到更新时传递给“片段”。不是很优雅,但应该可以。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句