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驱动起来延时两秒左右,这个需要自己去适配。

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

相关推荐
警醒与鞭策5 小时前
Codex桌面版与Claude桌面版使用设置
android·unity·ai·性能优化
传奇开心果8 小时前
【Compose Multiplatform跨端声明式UI实用技术】第19课:多平台部署与发布
android·kotlin
红尘伴蝶舞8 小时前
加密拦截器让抓包失效,我只能从 4KB 的 logcat 碎片里拼回 JSON
android·kotlin·ai编程
booboosui8 小时前
219 个还是 0 个:读不到微信界面时,我只加不删
android
Android打工仔8 小时前
Compose 中何时该用 padding,何时该用 offset
android·android jetpack
二流小码农8 小时前
HarmonyOS开发助手,0代码让元服务从开发到上架
android·ios·harmonyos
limit00759 小时前
三维 WebGIS 工具选型:加载、样式、分析、交付,一套界面能做完什么
android·前端·web3·安卓·webgl
骑着蜗牛撵大象32710 小时前
让 Codex 值夜班:把告警排查与巡检接成可回滚的自动化链路
android·java·运维·ai·自动化·codex·智能体
2401_8858850410 小时前
芬兰语音通知接口怎样对接?语音提醒接入流程
android·前端·python·php·语音识别
程序猿老A11 小时前
轻量应用服务器怎么用phpcms搭建网站?
android