投射按钮不显示

Cast button not displaying

我知道这是一个很常见的问题,尽管在 Whosebug 和 android developers site 中搜索让我一头雾水。

  1. 是否需要在 GoogleCast SDK 开发者控制台注册应用程序?我不需要自定义接收器,所以我可以使用 CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID,可以吗?
  2. 如果我注册应用程序并收到其 ID 但不发布它,它是否允许我使用 Google Cast 功能?
  3. 正在注册设备。我需要注册手机 phone 的序列号还是 Chromecast 的序列号?或两者?

我相信问题出在那里,但代码仍然在这里。可能由于其他原因没有显示 Cast Button。

清单:

...
    android:theme="@style/Theme.AppCompat">

    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
...

媒体路由器菜单media_router.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_router_menu_title"
        app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
        app:showAsAction="always"/>
</menu>

Gradle 依赖项:

compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:mediarouter-v7:21.0.0'
compile 'com.google.android.gms:play-services:7.3.0'

buildMediaRouter()onCreate():

中调用
private void buildMediaRouter(){
    mMediaRouter = MediaRouter.getInstance(getApplicationContext());

    // Create a route selector for the type of routes your app supports.
    mMediaRouteSelector = new MediaRouteSelector.Builder()
            .addControlCategory(MediaControlIntent.CATEGORY_LIVE_AUDIO)
            .addControlCategory(MediaControlIntent.CATEGORY_LIVE_VIDEO)
            .addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)
            //default app ID because I don't need custom Receiver
            .addControlCategory(CastMediaControlIntent.categoryForCast(CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID))
            .build();
}

正在创建选项菜单:

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    super.onCreateOptionsMenu(menu);
    // Inflate the menu and configure the media router action provider.
    getMenuInflater().inflate(R.menu.media_router, menu);

    // Attach the MediaRouteSelector to the menu item
    MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
    MediaRouteActionProvider mediaRouteActionProvider =
            (MediaRouteActionProvider) MenuItemCompat.getActionProvider(
                    mediaRouteMenuItem);
    mediaRouteActionProvider.setRouteSelector(mMediaRouteSelector);

    return true;
}

感谢任何帮助。

根据以下示例的设置说明,

https://github.com/googlecast/CastVideos-android

它也使用 MediaRouteActionProvider,不需要注册接收器。

你能用这个样本验证你的代码吗?我想到的另一件事是,也许您需要开发人员解锁您的 chromecast 设备。

要使用您的设备进行开发,请检查以下 link 中的 'Devices' 部分:https://developers.google.com/cast/docs/registration

回答您的问题:

  1. 只要您不需要自定义或样式化的接收器并且可以使用默认接收器,那么您就不需要注册任何东西。
  2. 如果您注册了一个应用但未发布该应用,则只有您已添加到注册中的投射设备可以看到该应用,其他投射设备将无法加载您的应用。
  3. 如果您注册应用,只有注册的投射设备才能看到您的应用(只要您的应用未发布)。发布应用后,任何投射设备都可以加载您的应用。出于开发目的,设备注册仅适用于投射设备,不适用于发送方设备。

注册您的投射设备后,请等待几分钟并重新启动您的设备,以便它可以采用新配置。一个常见的问题是为您的投射设备注册正确的序列号,很容易弄错 0 和 O 等,因此请拍下序列号的照片并放大以读取值。