HDMI连接状态监测

2019-11-26  本文已影响0人  笑对浮华

需求:通过安卓系统获取HDMI连接状态。
安卓获取HDMI连接状态有两种方法,一种是通过系统广播监听;另一种是读取系统文件,从而判断HDMI的连接状态。

2.1 HDMI到底是啥?

HDMI(High Definition MultimediaInterface )中文名叫高清晰度多媒体接口,是一种数字化视频/音频接口技术,是适合影像传输的专用型数字化接口,其可同时传送音频和影像信号,最高数据传输速度为18Gbps(2.0版)。

2.2 HDMI传输原理

看了网上的资料后,个人对HDMI的传输原理理解为:HDMI接口中一共有19个引脚,其中每个引脚有自己的作用,中间有那么几个引脚传输信号,第18引脚是供电的,最后一个引脚(第19个引脚)是用来提供支持HDMI热拔插的(热拔插:简而言之就是在不关闭设备的情况可以对HDMI线进行拔插并且不影响设备的运行),实现热拔插的过程是电压从18引脚进,19引脚出,获取18、19两个引脚见的电压如果低于0.5V就判定为此时HDMI已断开。

2.3 安卓监测原理

网上介绍了两种监测方法,一种是通过广播来监听,另一种是通过读取系统文件来判断。监测的手段就是通过安卓底层驱动对19引脚就行监听,HDMI线的插拔会触发广播事件。通过读取文件来判断就是,底层驱动会根据HDMI的通断状态创建一个文件,文件中存放设备的信息,包括连接状态,读取文件时把这个文件中标志设备状态的状态拿出来,以此判断HDMI的连接状态。

2.3.1 通过广播监听代码实例:

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")) {//HDMI插拔的广播事件
            boolean state = receivedIt.getBooleanExtra("state", false);//事件返回一个Boolean类型的state值,根据state值可以判断其状态,true表已连接,false表断开。
            if (state) {
                isHdmiConnect = true;
            } else {
                isHdmiConnect = false;
            }
        }
    }
};

2.3.2 通过读取系统文件判断HDMI连接状态代码实例:

/**
* 广播只能监听HDMI的插拔 第一次进入程序时不知道HDMI的连接状态
* 此时需要去读系统文件去判断HDMI的连接状态
*
* @return true 连接 false 未连接
*/

public 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连接状态的监听。通过广播监听时在初次进入时是监听不到的,所以在初次进入可通过第二种方法判断HDMI的连接状态;不建议直接使用第二种方法,循环定时读取系统文件来达到监听的效果,频繁的读取系统文件影响性能。以上就是本人对HDMI的一个初步认识和了解,在此记录一下。

上一篇 下一篇

猜你喜欢

热点阅读