Chromecast 按钮仅在应用后台运行后出现
Chromecast Button only appears after backgrounding the app
情况很简单。将 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)
}
toolbar_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
class 设置和正确的接收者 ID。这是调试版本,因此没有混淆器。
请注意,该按钮最终会出现,但只有在我 background/foreground 应用程序之后才会出现。我可以等 10 分钟,但什么也没有发生。但是如果我 background/foreground,按钮立即可见。
编辑:
非常感谢@fllo 的回答。他的建议比最终要求的多了一点,所以我想为其他人澄清一下。
我发布的代码很好。我所缺少的只是在 Activity
的 onCreate() 中初始化 CastContext。如果我刚刚考虑过它,那就完全有道理了。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
CastContext.getSharedInstance(this)
}
就是这样。简单的解决方案。希望对大家有帮助。
您需要确保在创建 Fragment 实例之前初始化 Cast SDK。
移动Cast SDK初始化代码
(CastButtonFactory with setUpMediaRouteButton(), CastStateListener and IntroductoryOverlay) 进入父 Activity 将按预期工作。然后,也许只是默认隐藏 MenuItem 并从 Fragment 中显示它就可以了。
根据the documentation,MediaRouteButton 应该在 FragmentActivity 中。我的猜测是回调不是从 Fragment 调用的,那么它的可见性不会动态改变。因此,您需要将其从 Activity 投射并在收到更新时传递给 Fragment。不是很优雅,但应该可以。
情况很简单。将 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)
}
toolbar_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
class 设置和正确的接收者 ID。这是调试版本,因此没有混淆器。
请注意,该按钮最终会出现,但只有在我 background/foreground 应用程序之后才会出现。我可以等 10 分钟,但什么也没有发生。但是如果我 background/foreground,按钮立即可见。
编辑:
非常感谢@fllo 的回答。他的建议比最终要求的多了一点,所以我想为其他人澄清一下。
我发布的代码很好。我所缺少的只是在 Activity
的 onCreate() 中初始化 CastContext。如果我刚刚考虑过它,那就完全有道理了。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
CastContext.getSharedInstance(this)
}
就是这样。简单的解决方案。希望对大家有帮助。
您需要确保在创建 Fragment 实例之前初始化 Cast SDK。
移动Cast SDK初始化代码 (CastButtonFactory with setUpMediaRouteButton(), CastStateListener and IntroductoryOverlay) 进入父 Activity 将按预期工作。然后,也许只是默认隐藏 MenuItem 并从 Fragment 中显示它就可以了。
根据the documentation,MediaRouteButton 应该在 FragmentActivity 中。我的猜测是回调不是从 Fragment 调用的,那么它的可见性不会动态改变。因此,您需要将其从 Activity 投射并在收到更新时传递给 Fragment。不是很优雅,但应该可以。