Chromecast按钮仅在后台启动应用程序后出现

Android开发

非常简单的情况。在上添加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()的CastButtonFactoryCastStateListenerIntroductoryOverlay)移到父Activity中将按预期工作。然后,也许只是默认情况下隐藏MenuItem并从Fragment中显示它即可解决问题。

根据文档,MediaRouteButton应该在FragmentActivity中。我的猜测是,不是从Fragment调用回调,因此,其可见性不会动态变化。因此,您将需要从“活动”中将其强制转换,并在接收到更新时传递给“片段”。不是很优雅,但应该可以。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在后台启动应用程序

在嵌入式Linux上启动后自动在后台启动Java应用程序

如何在后台启动BREW应用程序?

如何在后台启动另一个应用程序?

如果用户强行退出,iOS会在后台启动我的应用程序吗?

苹果的无声推送通知能否在后台启动我的应用程序?

在后台启动C程序

在ASP.NET Web应用程序中通过Process.Start()启动PowerPoint会导致PowerPoint在后台启动

即使在睡眠或重新启动后,仍在后台连续运行IOS应用程序

重新启动iPhone后,应用程序无法在后台运行

在后台启动Skype

在UbuntuGNOME 14.04中在后台添加启动应用程序

代号One-在后台放置应用程序的按钮

在后台状态后打开应用程序时黑屏

从后台启动时初始化phonegap应用程序

navigationController的Alpha是否会重置?当应用程序从后台启动时

在后台启动linux进程

.BAT文件:在后台启动JVM

在后台启动后续的cmd窗口

Strapi如何在后台启动?

如何在后台启动Deluge?

如何在后台启动phantomjs?

在后台启动功能并保存PID

从最近使用的应用程序清除后,是否可以使应用程序在后台运行?

即使强制停止了应用程序,也要重新启动服务;关闭应用程序后,仍要在后台运行服务。

iOS后台模式:在后台运行位置更新后,该应用程序永不终止

应用程序在后台访问PHPhotoLibrary

在后台运行的WPF应用程序

使Web应用程序在后台运行