對於HDMI設備連接狀態的監聽
阿新 • • 發佈:2017-10-16
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設備連接狀態的監聽