【问题标题】:Adding cast button to ActionBar using the CastCompanionLibrary使用 CastCompanionLibrary 将投射按钮添加到 ActionBar
【发布时间】:2014-03-18 04:37:11
【问题描述】:

我正在尝试使用 CastCompanionLibrary 的辅助方法将投射图标添加到 ActionBar:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.main, menu);
    mDataCastManager.addMediaRouterButton(menu, R.id.media_route_menu_item); // This one
    return true;
}

我将其作为我的 menu.xml,由随附库中包含的 PDF 指定:

<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="android.support.v7.app.MediaRouteActionProvider"
        app:showAsAction="always"/>
</menu>

但是,ActionBar 中没有显示任何内容。没有错误被抛出,没有任何东西是可见的。如果我添加一个不同的菜单项只是为了查看我的菜单中的所有内容是否设置正确,则该项目显示正常 - 只是这个演员操作菜单项没有显示。

我尝试将“app”前缀更改为“android”,但随后我在库深处的某处获得了NullPointerException,并且我尝试为菜单项提供不同的可见图标。没有什么帮助。

在 AndroidStudio 中,菜单预览会显示一个标题为“Play on...”的菜单项,因此看起来应该可以。

我做错了什么?

【问题讨论】:

  • 有没有可用的路线?我还没有使用过MediaRouteActionProvider(它在我的短名单上......),所以我不知道它的行为。但它可能只有在检测到路线时才会显示,并且一直消失到那个时候。
  • 出现了同样的问题。我已经按照手册完成了所有操作,但 Cast 菜单项从未出现。即使在最简单的应用程序中。但是一切都在 extras\google\google_play_services\samples\cast\democastplayer 示例中有效。没有运气找出原因?
  • 我终于解决了我的问题。罪魁祸首是我的应用程序 ID。出于某种原因,我的 chromecast 拒绝了它。我能够使用 CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID 显示 Cast 图标。显然,这是错误的,但我的目标是概念验证。

标签: android google-cast


【解决方案1】:

您必须将您的 chrome-cast 注册为测试设备,才能从 Android 检测到 chromecast 设备。

查看完整的 SDK guide
检查开发者console注册。您必须在此处在控制台中注册您的 chromecast 设备,否则无法检测到

更新:如果没有任何效果,作为最后的手段,您可以尝试在 chromecast 开发控制台中发布您的应用。

正如一位 chromecast 开发人员所提到的,尝试从浏览器访问 http://&lt;chromecast-ip&gt;:9222 并查看您是否能够看到任何内容。

【讨论】:

  • 请不要给出“在 chromecast 开发控制台中发布您的应用程序”的错误建议,绝对没有必要发布您的应用程序以便在您的开发设备中看到;事实上,当您进行开发时,我们的建议是不要发布它。如果您在不发布应用程序的情况下无法使其工作,那么您需要解决一个问题; “发布”只会隐藏问题。
  • 同意!修改了我的答案。
  • 谢谢 - 我可能需要在开发者控制台中进行一些调整。我的 Chromecast 已被列入白名单,并且在公开发布之前一切正常,我现在只是将所有内容移植到使用新的配套库因为它可以为您处理和做很多事情。我会尽快查看我的设置并报告。
  • 就是这样 - 我必须将设备的序列号放在我的 Cast 开发者控制台中。在我这样做之后,一切都正常工作,没有任何其他更改。
  • 我已经注册了我的应用程序(我应该把给定的应用程序 ID 放在哪里?)我注册了我的 Chromecast 并说“准备测试”。我和你有同样的问题,但你的解决方案对我不起作用。
【解决方案2】:

有时,这些类型的错误发生是因为 proguard 更改了对象和/或函数的名称。

一种可能的解决方案是将这些添加到您的 progaurd 配置文件中:

-dontwarn android.support.v7.**
-keep class android.support.v7.internal.** { *; }
-keep interface android.support.v7.internal.** { *; }
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }

我实际上在确切的行上遇到了这个确切的错误,并且我没有为支持库正确配置我的 proguard。

【讨论】:

    【解决方案3】:

    在设备注册后我忘记重启chromecast设备

    【讨论】:

      【解决方案4】:

      CastCompanionLibrary 和 MediaRouteActionProvider 是为 AppCompat ActionBar 而不是 Sherlock ActionBar 编写的。强烈建议将您的项目移至 AppCompat,因为 Sherlock ActionBar 已被弃用,因此移至 AppCompat 通常对您的项目来说是一个不错的举措;采取这一行动并不困难(例如,参见 article

      【讨论】:

      • 实际上我已经在使用 AppCompat ActionBar,所以不是这样。
      • 抱歉,不知为何我以为你在使用 Sherlock。现在回到你的问题,确保你已经在开发控制台上注册了你的应用程序。如果这样做了并且如果您的 chromecast 设备被列入白名单(即您可以访问 http://:9222),那么它应该适合您(假设您的 chromecast 设备在同一个 wifi 网络上)
      猜你喜欢
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      相关资源
      最近更新 更多