首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式从android转换到miracast接收器的步骤

以编程方式从android转换到miracast接收器的步骤
EN

Stack Overflow用户
提问于 2015-11-20 14:19:59
回答 2查看 17.4K关注 0票数 14

我正在编写一个应用程序,它将开始通过miracast将Android手机的屏幕投射到电视上。我使用的是HDMI软盘,因为问题中的电视不支持miracast。我一直在尝试代码这里,但是它需要一个应用程序ID,这是我在这些步骤之后得到的。我的问题是,指令似乎表明,我需要注册miracast dongle,以便它将与一个未发布的“调试”应用程序对话。然而,只提到谷歌的广播设备,这与miracast的协议不一样。我还需要注册吗?

有没有一种更简单的通过miracast对设备进行编程转换的方法?一个要求是没有用户交互,所以我不能只是显示一个强制按钮。

如果相关的话,我正在使用Android5.1。

编辑:经过进一步的研究,我意识到Google使用了一个与Miracast完全不同的协议,因此所有关于注册dongle的讨论都是无关紧要的。在Android中做Miracast是不需要注册的。问题是API是隐藏的,详见下面的答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-09 15:32:21

因此,这是可能的,但由于权限问题,只能在定制版本的Android上使用。

您需要使用的

WifiDisplay API的隐藏部分使其成为可能。此文件包含如何使用API转换显示的示例。据我所知,谷歌将在某个时候公开发布它,尽管它仍然隐藏在API 23的最新主版中。

如何访问隐藏的API

为了使用隐藏的API,这个指南(镜子在这里)提供了一个很好的介绍。但是,如果您使用的是API 22+,那么该指南将无法工作,因为android.jar的格式已经改变,并且classes.dex已经被分割成多个文件。因此,在这种情况下,建议更准确。注意,关于framework-classes2.dex 的postscript也必须是;它不是可选的。

dex2jar工具的最新版本未能将API 22中的.dex文件转换为jar。作者这里提出了解决方案。我选择修补这个工具,而不是改变dex,因为这对我没有用。只需将作者提到的行从抛出RuntimeException更改为:

代码语言:javascript
复制
return TypeClass.INT;

如何获得使用隐藏API的权限

一旦全部完成,下一步就是给你的应用程序CONFIGURE_WIFI_DISPLAY许可。不幸的是,正如您所看到的,这里具有系统级别的保护。这意味着您的应用程序必须使用与系统相同的密钥才能使用此权限。因此,除非你有谷歌的私钥,否则你就不能让你的应用程序在正常的Android手机上运行。我的解决方案是构建CyanogenMod的自定义版本(使用指南),权限从“system”更改为“normal”。这就省去了签署任何东西的麻烦。对于CONTROL_WIFI_DISPLAY权限,我也做了同样的操作。虽然我不完全确定这是必要的,但这并不伤人。这两个权限都位于frameworks/base/core/res/AndroidManifest.xml中。将第2161-2169行改为:

代码语言:javascript
复制
<permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY"
    android:protectionLevel="signature" /> 
<permission android:name="android.permission.CONTROL_WIFI_DISPLAY"
    android:protectionLevel="signature" />

至:

代码语言:javascript
复制
<permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY"
    android:protectionLevel="normal" /> 
<permission android:name="android.permission.CONTROL_WIFI_DISPLAY"
    android:protectionLevel="normal" />

然后按照正常方式构建CyanogenMod。我可以确认这确实有效,但这限制了您的应用程序只能在安装了自定义CyanogenMod版本的设备上运行。此外,在安卓手机上安装CyanogenMod通常会使保修无效。

票数 12
EN

Stack Overflow用户

发布于 2019-02-14 04:50:39

代码语言:javascript
复制
try {
         startActivity(new Intent("android.settings.CAST_SETTINGS"));
         return;
     } catch (Exception exception1) {
         Toast.makeText(getApplicationContext(), "Device not supported", Toast.LENGTH_LONG).show();
     }

希望这将有助于您,做好屏幕镜像的转换设置,它使用您的设备的cast服务。但是你必须连接相同的无线网络设备和电视。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33828968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档