在 Android 应用中使用 libCEC + USB 加密狗

Posted

技术标签:

【中文标题】在 Android 应用中使用 libCEC + USB 加密狗【英文标题】:Use libCEC + USB dongle in Android app 【发布时间】:2018-01-20 04:59:39 【问题描述】:

我的目标是从一个标准(即非系统)应用程序发送 HDMI CEC 命令,该应用程序在配备 Pulse-Eight 的 USB 加密狗的 android 盒子上运行。

按照these instructions,我成功地为Android编译libcec并在盒子上以root身份执行它,使用以下命令:

echo <my-cec-command> | cec-client -s /dev/ttyACM0

其中/dev/ttyACM0是系统在插入加密狗时创建的设备文件。

但是,该文件的权限阻止了非 root 用户执行命令(因此无法从我的 Android 应用程序执行)。

另一方面,应用程序实际上可以通过 Android SDK 的USB Host API 访问 USB 加密狗(前提是用户授予权限),甚至可以使用UsbSerial 库将其封装到 USB 串行控制器中。

但我看不到任何方法可以在 Android 的 USB 主机 API 和 libcec/cec-client 提供的连接之间建立桥梁。您有什么想法或建议吗?

【问题讨论】:

【参考方案1】:

到目前为止,我发现的最佳解决方案是使用 USB Host API + UsbSerial library 使用纯 Java 代码(无嵌入式 libCEC)在适配器的串行端口上读取/写入 CEC 数据包。

我在libCEC 上进行了一些逆向工程,以找出适用于基本操作的命令,例如打开和关闭电视以及设置活动源。

我终于想出了以下UsbCecConnection java 类:https://gist.github.com/sdabet/ac4d7711d1a529806cb7b695530b1fac

【讨论】:

我尝试了这种方法,但是当我尝试通过 usbManager.getDeviceList() 列出所有 USB 设备时,它不返回任何设备。知道为什么吗?我已经用我的方法发表了一篇文章,但仍然没有成功(***.com/questions/45639210/…)。提前感谢您的任何指导。

以上是关于在 Android 应用中使用 libCEC + USB 加密狗的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 应用程序中使用自定义主题

如何在 android 应用程序中使用 OSM 地图。?有啥教程可以学习在android中使用OSM吗?

在 Android 12 中使用 WorkManager

我可以在 sencha 应用程序(Android)中使用 android AsyncTask

在 Android Studio 中使用 ActivityInstrumentationTestCase2 在横向测试 Android 应用程序

如何在 Android 应用程序中使用 javaanpr?