zoukankan      html  css  js  c++  java
  • 对于HDMI设备连接状态的监听

    对与最近主要做的是电视机盒子端的开发,其中涉及到设备的状态监听比较繁琐,所以对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;
    }
    }

    这种方法可以直接获取状态,但如果多次频繁查询可能会出现异常抛出,建议两种方法配合使用最为稳定。
  • 相关阅读:
    c# EPPlus读取Excel里面的时间字段时,1900-01-01转成了1899-12-31
    c# MongoDB分页辅助类,支持多条件查询
    c#比较器辅助类
    mysql创建存储过程动态SQL语句
    MySQL数据库之DML(数据操作语言)
    MySQL数据库之DDL(数据定义语言)
    MySQL数据库的基本语法
    MySQL入门基础知识
    scala入门基础学习
    推荐算法杂点
  • 原文地址:https://www.cnblogs.com/fuccc/p/7676813.html
Copyright © 2011-2022 走看看