1. 程式人生 > >對於HDMI設備連接狀態的監聽

對於HDMI設備連接狀態的監聽

icon 查詢 頻繁 ive 廣播 equals rec equal cte

對與最近主要做的是電視機盒子端的開發,其中涉及到設備的狀態監聽比較繁瑣,所以對HDMI的連接狀態的監聽方法做個記錄,方便後續查看。

主要通過兩種方式:

(1)比較常用的廣播監聽

註冊一個動態廣播來獲取HDMI接口的插拔,它的Action的name為 “android.intent.action.HDMI_PLUGGED”,具體的代碼如下:

private static BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent receivedIt) {
String action = receivedIt.getAction();
if (action.equals("android.intent.action.HDMI_PLUGGED")) {
boolean state = receivedIt.getBooleanExtra("state", false);
if (state) {
isHdmiConnect = true;
} else {
isHdmiConnect = false;
}
}
}
};

這樣可以監聽HDMI接口的插拔,但存在一個問題當第一次進入程序的時候是不知道HDMI的狀態的需要配合第二種方式。

(2)讀取系統文件中的內容

直接讀取系統文件中的數據,路徑為"/sys/devices/virtual/switch/hdmi/state",其中存在一些設備的存儲路徑不同需要做出修改具體代碼如下:

private static boolean isHdmiSwitchSet() {
// The file ‘/sys/devices/virtual/switch/hdmi/state‘ holds an int -- if it‘s 1 then an HDMI device is connected.
// An alternative file to check is ‘/sys/class/switch/hdmi/state‘ which exists instead on certain devices.
File switchFile = new File("/sys/devices/virtual/switch/hdmi/state");
if (!switchFile.exists()) {
switchFile = new File("/sys/class/switch/hdmi/state");
}
try {
Scanner switchFileScanner = new Scanner(switchFile);
int switchValue = switchFileScanner.nextInt();
switchFileScanner.close();
return switchValue > 0;
} catch (Exception e) {
return false;
}
}

這種方法可以直接獲取狀態,但如果多次頻繁查詢可能會出現異常拋出,建議兩種方法配合使用最為穩定。

對於HDMI設備連接狀態的監聽