gpt4 book ai didi

android - 您可以在不使用 ActionBar 的情况下添加 Chromecast 功能吗

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:52 25 4
gpt4 key购买 nike

我一直在使用 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,这意味着我没有任何“ Hook ”来选择路线等。

有人知道如何解决这个问题吗?

最佳答案

首先,我建议您考虑迁移到 appcompat 操作栏,这样您就可以获得开箱即用的所有好处。

也就是说,您的问题的答案是:是的,如果您愿意做一些额外的工作来管理生命周期并自行声明,这是可行的。我在此处概述了步骤,以便您可以为自己创建一个工作示例。要求是在你的项目中有来自 v7 支持库的 appcompat 和 mediarouter,但你不需要使用任何特定类型的 actionbar 或不需要使用 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);

  • 最后,这将调用 myMediaRouteAdapteronDeviceAvailable() 回调并将一个 CastDevice 传递给您,您应该可以获取该回调并使用。当你完成一条路线并想“取消选择”它时,调用

mMediaRouter.selectRoute(mMediaRouter.getDefaultRoute());

希望这足以让您继续前进。

关于android - 您可以在不使用 ActionBar 的情况下添加 Chromecast 功能吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20547902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com