投射按钮不显示

时间:2015-06-02 14:33:19

标签: android casting chromecast google-cast

我知道这是一个相当普遍的问题,虽然通过stackoverflow搜索并且android developers site让我没有完整的图片。

  1. 是否有必要在Google Cast SDK开发者控制台中注册应用?我不需要自定义接收器,所以我可以使用CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID,我可以吗?
  2. 如果我注册申请并收到其ID但不发布,是否允许我使用Google Cast功能?
  3. 注册设备。我是否需要注册手机的序列号或Chromecast?或两者?
  4. 我相信问题就在那里,但仍然是代码。由于某些其他原因,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>
    

    Graddle依赖项:

    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'
    
    onCreate()中调用

    buildMediaRouter()

    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;
    }
    

    感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

回答你的问题:

  1. 只要您不需要自定义或样式的接收器并且使用默认接收器就可以了,那么您无需注册任何内容。
  2. 如果您注册某个应用但未发布该应用,则只有您添加到注册中的其他演员设备才能看到该应用,其他任何演员设备都无法加载您的应用。
  3. 如果您注册了某个应用,则只有已注册的演员设备才能看到您的应用(只要您的应用未发布)。发布应用后,任何演员设备都可以加载您的应用。出于开发目的,注册设备仅适用于演员设备而非发件人设备。
  4. 注册您的演员设备后,请等待几分钟并重新启动设备,以便它可以获取新配置。一个常见的问题是为您的演员设备注册正确的序列号,很容易误认为0和O等,所以拍下序列号的照片并放大以读取值。

答案 1 :(得分:1)

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

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

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

您可以使用此示例验证您的代码吗?另外一件事,我想到的是,您需要开发人员解锁您的chromecast设备。

要使用您的设备进行开发,请查看设备&#39;以下链接中的部分:https://developers.google.com/cast/docs/registration