ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – 你可以在不使用ActionBar的情况下添加Chromecast功能吗?

2019-08-31 08:26:08  阅读:171  来源: 互联网

标签:android chromecast


我一直在使用Google的示例应用程序来准备我们的Chromecast功能,

然而,我发现你需要在ActionBar中设置一个按钮(由Google实现),以获得一个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;
}

完整,整个示例和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();

>通过在您的onStart()中调用以下内容来启动发现:


 mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback,
                        MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);

>在自定义回调MyMediaRouterCallback中,在添加或删除路由时侦听路由.当路由被发现时,你的回调的onRouteAdded()方法将被调用,当它们消失时,将调用onRouteRemoved().您现在有责任在您选择的数据结构中保留有效路由列表.
>让我们说,为了论证,你在一个对话框中呈现给用户的列表(有意义,不是吗?),其中用户在UI中看到路由(即设备)的名称,每个项目代表一个RouteInfo .然后,当用户点击路线时,您需要拨打电话


mMediaRouter.selectRoute(info);

>上面的调用会导致调用自定义回调的另一个回调函数onRouteSelected().在该回调中,请调用以下内容:


MediaRouteHelper.requestCastDeviceForRoute(info);

>最后,这将调用myMediaRouteAdapter的onDeviceAvailable()回调并将CastDevice传递给您应该能够抓取并使用的.当您完成路线并想要“取消选择”它时,请致电


mMediaRouter.selectRoute(mMediaRouter.getDefaultRoute());

希望这足以让你前进.

标签:android,chromecast
来源: https://codeday.me/bug/20190831/1774265.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有