以编程方式从android转换为miracast接收器的步骤
作者:互联网
我正在尝试编写一个应用程序,它将开始通过miracast将屏幕从Android手机投射到电视上.我正在使用HDMI加密狗,因为有问题的电视本身并不支持miracast.我一直在尝试代码here,但它需要一个我在these steps之后得到的应用程序ID.我的问题是,说明似乎表明我需要注册miracast加密狗,以便它与未发布的’debug’应用程序进行通信.但是,仅提及Google Cast设备,这与miracast的协议不同.我还需要注册加密狗吗?
有没有更简单的方式通过miracast以编程方式投射到设备?要求是没有用户交互,所以我不能只显示一个强制转换按钮.
我正在使用Android 5.1,如果这是相关的.
编辑:经过进一步的研究,我意识到Google Cast使用了与Miracast完全不同的协议,因此所有关于注册加密狗的讨论都是无关紧要的. Android中的Miracast根本不需要注册.问题是隐藏了API,请参阅下面的答案以获取详细信息.
解决方法:
所以这是可能的,但仅限于Android的自定义版本,因为权限问题.
你需要使用什么
WifiDisplay API的隐藏部分使一切成为可能.此file包含如何使用API转换显示的示例. appears谷歌将在某个时候公开发布它,尽管它仍然隐藏在最新的API 23大师中,据我所见.
如何访问隐藏的API
要使用隐藏的API,这个guide提供了一个很好的介绍.但是,如果您正在使用API 22,则该指南将无法正常工作,因为android.jar的格式已更改且classes.dex已拆分为多个文件.因此,this建议在这种情况下更准确.请注意,还必须完成有关framework-classes2.dex的postscript;它不是可选的.
最新版本的dex2jar工具无法将.dex文件从API 22转换为jar.作者here提到了解决方案.我选择修改工具而不是更改dex,因为这对我不起作用.只需更改作者提到的将RuntimeException抛出的行:
return TypeClass.INT;
如何获得使用隐藏API的权限
完成所有操作后,下一步就是为您的应用提供CONFIGURE_WIFI_DISPLAY权限.不幸的是,正如您可以看到here,它具有系统级保护.这意味着您的应用必须使用与系统相同的密钥进行签名才能使用此权限.因此,除非您拥有Google的私钥,否则您无法在普通的Android手机上运行您的应用.我的解决方案是构建CyanogenMod的自定义版本(使用this指南),权限从“system”更改为“normal”.这样就不需要为签署任何东西而烦恼.我也对CONTROL_WIFI_DISPLAY权限做了同样的事情.虽然我不完全确定这是必要的,但它并没有伤害.这两个权限都位于frameworks / base / core / res / AndroidManifest.xml中.从以下位置更改2161-2169行:
<permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY"
android:protectionLevel="signature" />
<permission android:name="android.permission.CONTROL_WIFI_DISPLAY"
android:protectionLevel="signature" />
至:
<permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY"
android:protectionLevel="normal" />
<permission android:name="android.permission.CONTROL_WIFI_DISPLAY"
android:protectionLevel="normal" />
然后正常构建CyanogenMod.我可以确认这确实有效,但这限制了您的应用程序在安装了此自定义版本CyanogenMod的设备上运行.此外,在Android手机上安装CyanogenMod通常会使保修失效.
标签:wifi-direct,google-cast,android,casting,miracast 来源: https://codeday.me/bug/20191001/1839122.html