And*_*Dev 6 android chromecast
情况很简单。添加一个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)
}
Run Code Online (Sandbox Code Playgroud)
工具栏菜单.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>
Run Code Online (Sandbox Code Playgroud)
看来应该这样做。我的CastOptionsProvider课程设置具有正确的接收者 ID。这是一个调试版本,因此没有 proguard。
请注意,该按钮最终确实会出现,但仅在我将应用程序置于后台/前台之后才会出现。我可以等 10 分钟,但什么也没有发生。但如果我是背景/前景,按钮立即可见。
编辑:
非常感谢@fllo 的回答。他的建议比最终要求的要多一些,所以我想向其他人澄清一下。
我发布的代码很好。我所缺少的只是在Activity. 如果我仔细想想的话,这是完全有道理的。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
CastContext.getSharedInstance(this)
}
Run Code Online (Sandbox Code Playgroud)
就是这样了。简单的解决方案。希望它能帮助某人。
您需要确保在创建 Fragment 实例之前初始化 Cast SDK。
将 Cast SDK 初始化代码(带有 setUpMediaRouteButton() 的 CastButtonFactory、CastStateListener和IntroductoryOverlay)移动到父 Activity 中将按预期工作。然后,也许默认情况下隐藏 MenuItem 并从 Fragment 中显示它就可以了。
根据文档,MediaRouteButton 应该位于 FragmentActivity 中。我的猜测是回调不是从片段调用的,那么它的可见性不会动态改变。因此,您需要在收到更新时从 Activity 中投射它并向下传递到 Fragment。不是很优雅,但应该可以。
| 归档时间: |
|
| 查看次数: |
1005 次 |
| 最近记录: |