Gra*_*eme 3 android chromecast
我一直在使用Google的示例应用程序来准备我们的Chromecast功能,
然而,我发现你需要在ActionBar(由谷歌实施)中有一个按钮ActionProvider,以便将你的选择器附加到.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.main, menu);
MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
MediaRouteActionProvider mediaRouteActionProvider = (MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem);
mediaRouteActionProvider.setRouteSelector(mCaster.getMediaRouteSelector());
return true;
}
Run Code Online (Sandbox Code Playgroud)
完整,整个示例和API似乎是热线连接到使用此按钮的中心.我很好地重现了Android试图在这里使用的外观和感觉 - 但我在我的应用程序中使用自定义ActionBar,这意味着我没有任何"钩子"来选择路线等.
有谁知道如何解决这个问题?
首先,我建议您考虑转移到appcompat操作栏,这样您就可以获得开箱即用的所有好处.
也就是说,您的问题的答案是:是的,如果您愿意做一些额外的工作来管理生命周期并自己陈述,那么这是可行的.我概述了这里的步骤,以便您可以为自己创建一个工作示例.要求是在项目中使用v7支持库的appcompat和mediarouter,但不需要使用任何特定类型的操作栏,也不需要使用MediaRouteButton; 实际上,您可以以任何您想要的形状或形式触发发现和其余部分.以下是步骤:
确保来自v7支持库的appcompat和mediarouter包含在您的依赖项中.拥有v7版本的mediarouter非常重要
做通常的事情,即构建一个CastContext并准备好发现的阶段(你需要创建一个MediaRouteAdapter我已经调用过的实例myMediaRouteAdapter):
mCastContext = new CastContext(getApplicationContext());
MediaRouteHelper.registerMinimalMediaRouteProvider(mCastContext,
myMediaRouteAdapter);
mMediaRouter = MediaRouter.getInstance(getApplicationContext());
mMediaRouteSelector = MediaRouteHelper
.buildMediaRouteSelector(MediaRouteHelper.CATEGORY_CAST,
"YOUR_APP_NAME", null);
mMediaRouterCallback = new MyMediaRouterCallback();
Run Code Online (Sandbox Code Playgroud)
mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback,
MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
Run Code Online (Sandbox Code Playgroud)
在自定义回调中MyMediaRouterCallback,在添加或删除路由时侦听路由.当路由被发现时,你onRouteAdded()的回调方法将被调用,当它们消失时,onRouteRemoved()将调用它.您现在有责任在您选择的数据结构中保留有效路由列表.
让我们说,为了论证,你在一个对话框中呈现给用户的列表(有意义,不是吗?),其中用户在UI中看到路由(即设备)的名称,每个项目代表一个RouteInfo.然后,当用户点击路线时,您需要拨打电话
mMediaRouter.selectRoute(info);
Run Code Online (Sandbox Code Playgroud)
onRouteSelected().在该回调中,请调用以下内容:
MediaRouteHelper.requestCastDeviceForRoute(info);
Run Code Online (Sandbox Code Playgroud)
onDeviceAvailable()回调myMediaRouteAdapter并传递CastDevice给你,你应该能够抓取并使用它.当您完成路线并想要"取消选择"它时,请致电
mMediaRouter.selectRoute(mMediaRouter.getDefaultRoute());
Run Code Online (Sandbox Code Playgroud)
希望这足以让你前进.
| 归档时间: |
|
| 查看次数: |
2627 次 |
| 最近记录: |