2016-09-09 72 views
19

我正在使用Android 4.4.4版的PlugPC(计算器),将它连接到电视机的HDMI端口,以控制电视机上显示的内容。我的应用程序在启动时开始,控制屏幕。现在通过我的应用程序,我想控制电视音量和来源开关(也许)。我在这方面下列问题:Android和HDMI CEC

  1. 有没有办法使用Java来控制电视音量,打开/关闭等兼容的电视使用Android发送HDMI-CEC的命令?

  2. Android提供的任何Java库或以其他方式提供的相同的Java库吗?

  3. 使用CEC的简单Java示例。

P.S - 我理解的(https://source.android.com/devices/tv/HDMI-CEC.html)提出的理论,而是无能有关如何使用代码来实现。请具体说明您对上述问题的回答。

+2

有*可能*的方式,但1)您的设备必须有一个红外发射。和2)询问图书馆对于StackOverflow是无关紧要的。祝你好运! –

+2

https://source.android.com/devices/tv/HDMI-CEC.html –

+0

你有问题的设备的根访问? –

回答

5

是的,这是完全可以做到的,然而它是难以置信的善变。 HDMI CEC像公共汽车一样工作。通常,在两个方向。

您的问题:

  1. 是。尽管我使用JNI来访问执行实际工作的本地代码。您可能可能能够纯粹使用Java。
  2. 可能不是。问题是每个供应商都实施代码来发送CEC信号。除了CEC命令本身之外,根本没有共同的功能。访问的设备文件在大多数设备中可能都是独一无二的,特别是从供应商到供应商。因此,任何创建的图书馆都支持广泛的不同供应商和他们的怪癖,而且它将不会面临下一个供应商变更的未来挑战。
  3. 不幸的是我无法提供我的工作代码。我在github上提供了一个Amlogic源文件的链接,它可以完成许多工作。我的代码看起来类似。

我自己的一些点:

  1. 并非所有设备都支持所有命令。许多较少使用的命令将不会被执行,因为它花费更多。
  2. 与CEC的交互通常取决于供应商。他们可能会有自己的库或设备文件来处理。
  3. CEC不会总是在两个方向上工作,它取决于供应商是否实现了该功能。它并不总是得到实施,因为它的成本更高。

要正确地做到这一点,您可能需要使用JNI来实现您的代码以形成正确的数据包。至少对于Amlogic,您可能需要find this useful

我在我的设备中使用的设备接入点是/dev/amhdmitx0。您可以将您的格式良好的数据包发送到该位置。

这是一个有用的网站,可以告诉你如何形成CEC命令:http://www.cec-o-matic.com/

不幸的是,我不能分享比我写的更多的东西。出于各种法律原因。

您可以做的最好的事情是从您正在编程的供应商那里寻求帮助。如果您正在为特定平台编码。他们可能愿意帮助你。

+0

我们一直在从nexus回放客户端发送cec命令到启用cec的Samsung电视,但发送cec命令我们需要byte []信息,源地址和目标地址。请帮忙 –