2016-09-09 125 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 []信息,源地址和目標地址。請幫忙 –