投射按钮不显示
Cast button not displaying
我知道这是一个很常见的问题,尽管在 Whosebug 和 android developers site 中搜索让我一头雾水。
- 是否需要在 GoogleCast SDK 开发者控制台注册应用程序?我不需要自定义接收器,所以我可以使用
CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID
,可以吗?
- 如果我注册应用程序并收到其 ID 但不发布它,它是否允许我使用 Google Cast 功能?
- 正在注册设备。我需要注册手机 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
回答您的问题:
- 只要您不需要自定义或样式化的接收器并且可以使用默认接收器,那么您就不需要注册任何东西。
- 如果您注册了一个应用但未发布该应用,则只有您已添加到注册中的投射设备可以看到该应用,其他投射设备将无法加载您的应用。
- 如果您注册应用,只有注册的投射设备才能看到您的应用(只要您的应用未发布)。发布应用后,任何投射设备都可以加载您的应用。出于开发目的,设备注册仅适用于投射设备,不适用于发送方设备。
注册您的投射设备后,请等待几分钟并重新启动您的设备,以便它可以采用新配置。一个常见的问题是为您的投射设备注册正确的序列号,很容易弄错 0 和 O 等,因此请拍下序列号的照片并放大以读取值。
我知道这是一个很常见的问题,尽管在 Whosebug 和 android developers site 中搜索让我一头雾水。
- 是否需要在 GoogleCast SDK 开发者控制台注册应用程序?我不需要自定义接收器,所以我可以使用
CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID
,可以吗? - 如果我注册应用程序并收到其 ID 但不发布它,它是否允许我使用 Google Cast 功能?
- 正在注册设备。我需要注册手机 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
回答您的问题:
- 只要您不需要自定义或样式化的接收器并且可以使用默认接收器,那么您就不需要注册任何东西。
- 如果您注册了一个应用但未发布该应用,则只有您已添加到注册中的投射设备可以看到该应用,其他投射设备将无法加载您的应用。
- 如果您注册应用,只有注册的投射设备才能看到您的应用(只要您的应用未发布)。发布应用后,任何投射设备都可以加载您的应用。出于开发目的,设备注册仅适用于投射设备,不适用于发送方设备。
注册您的投射设备后,请等待几分钟并重新启动您的设备,以便它可以采用新配置。一个常见的问题是为您的投射设备注册正确的序列号,很容易弄错 0 和 O 等,因此请拍下序列号的照片并放大以读取值。