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

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

相关推荐
灿烂阳光g14 小时前
domain_auto_trans,source_domain,untrusted_app
android·linux
低调小一15 小时前
Android传统开发 vs Android Compose vs HarmonyOS ArkUI 对照表
android·华为·harmonyos
雨白16 小时前
Java 多线程指南:从基础用法到线程安全
android·java
00后程序员张17 小时前
详细解析苹果iOS应用上架到App Store的完整步骤与指南
android·ios·小程序·https·uni-app·iphone·webview
程序员江同学18 小时前
ovCompose + AI 开发跨三端的 Now in Kotlin App
android·kotlin·harmonyos
2501_9151063218 小时前
Xcode 上传 ipa 全流程详解 App Store 上架流程、uni-app 生成 ipa 文件上传与审核指南
android·macos·ios·小程序·uni-app·iphone·xcode
消失的旧时光-194318 小时前
Kotlinx.serialization 使用讲解
android·数据结构·android jetpack
灿烂阳光g19 小时前
SELinux 策略文件编写
android·linux
.豆鲨包19 小时前
【Android】Viewpager2实现无限轮播图
android·java