美文网首页
HDMI连接状态监测

HDMI连接状态监测

作者: 笑对浮华 | 来源:发表于2019-11-26 15:51 被阅读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的一个初步认识和了解,在此记录一下。

    相关文章

      网友评论

          本文标题:HDMI连接状态监测

          本文链接:https://www.haomeiwen.com/subject/nwtywctx.html