rk3588 Android HDMI IN热插拔解决

一、前言

1、公司在使用 别的厂商的板卡遇到一个问题,开机我们的app自启就会闪退,后来定位发现是camera 的open出错了,这个问题的出现是因为没有插HDMI IN输入的问题导致的,所以需要对HDMI IN的热插拔进行检测,后面我把这个问题也顺利解决了。下面是我的尝试和使用的解决办法。

二、尝试广播

1、尝试使用广播的形式去解决这个问题,网上也是能够搜到对应的文章: www.cnblogs.com/fuccc/p/767...

2、后来发现广播并没有反应没有任何效果,后来上网搜索好像找到了原因,大概如下图吧。

三、尝试读取系统文件

1、也是上面搜索到的文章提示我尝试读取系统文件

2、同时我也查阅了RK官方的HMDI IN的开发指南Rockchip HDMI IN开发指南 (nnewn.com),得出结论:

可以尝试通过读取文件查询状态,或者,我是说或者有可能通过TIF可以检测HDMI IN的状态,因为,文中也提到了camera和tv进行了交互。

3、话不多说,我用的是读取系统文件实现的,但是这个方法,需要有status文件的系统读权限,可以修改设备下的/vendor/etc/init/hw/init.rk3588.rc文件修改的权限,这个问题交给自己或者厂家协商解决。下面是代码:

java 复制代码
public class HdmiService {
    private static final String TAG = "HdmiService";
    private boolean threadStatus; //线程状态,为了安全终止线程
    // 实时读取文件
    private File mHmdiRx = null;
    private FileReader mHdmiRxReader = null;
    private BufferedReader mHdmiBufReader = null;
    // rk的HDMI IN路径和别的不太一样
    private String mHdmiRxDevicePath = "/sys/kernel/debug/hdmirx/status";
    private String mFristStrStatus = "";


    private static HdmiService instance = new HdmiService();
    public static HdmiService getInstance() {
        return instance;
    }

    public void init(){
        Log.d(TAG, "init :read thread run");
        mHmdiRx = new File(mHdmiRxDevicePath);

        threadStatus = false;
        ReadThread readThread = new ReadThread();
        readThread.start();

    }

    private class ReadThread extends Thread{
        @Override
        public void run() {
            super.run();
            while (!threadStatus){
//                Log.d(TAG, "read thread run");
                try {
                    Thread.sleep(800);
                    // 读取首行内容
                    mHdmiRxReader = new FileReader(mHmdiRx);
                    mHdmiBufReader = new BufferedReader(mHdmiRxReader);
                    String firstLine = mHdmiBufReader.readLine();
                    mHdmiBufReader.close();
                    // 处理读取到的首行内容
                    if (firstLine != null) {
                        mFristStrStatus = firstLine;
                        HdmiRxUtil.getInstance().StatusChange(mFristStrStatus);
                    }

                }catch (IOException e) {
                    Log.d(TAG, "run: read data exception:" +e.toString());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

三、注意 检测到了HDMI IN 插入的状态之后,需要等HDMI IN驱动起来延时两秒左右,这个需要自己去适配。

最后我就讲到这,希望能够帮助大家。

相关推荐
2501_9445255412 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 预算详情页面
android·开发语言·前端·javascript·flutter·ecmascript
清蒸鳜鱼13 小时前
【Mobile Agent——Droidrun】MacOS+Android配置、使用指南
android·macos·mobileagent
2501_9159184113 小时前
HTTPS 代理失效,启用双向认证(mTLS)的 iOS 应用网络怎么抓包调试
android·网络·ios·小程序·https·uni-app·iphone
峥嵘life14 小时前
Android EDLA CTS、GTS等各项测试命令汇总
android·学习·elasticsearch
Cobboo14 小时前
i单词上架鸿蒙应用市场之路:一次从 Android 到 HarmonyOS 的完整实战
android·华为·harmonyos
天下·第二14 小时前
达梦数据库适配
android·数据库·adb
定偶14 小时前
MySQL知识点
android·数据结构·数据库·mysql
iwanghang14 小时前
Android Studio 2023.2.1 新建项目 不能选择Java 解决方法
android·ide·android studio
似霰14 小时前
JNI 编程指南10——从内存角度看引用类型
android·jni
南墙上的石头14 小时前
Android端 人工智能模型平台开发实战:模型服务部署与运维平台
android·运维