android_8.1 hdmi设备热插拔事件

平时我们对hdmi等设备插拔,只要硬件支持设备热插拔检测,android都有代码检测到,热插拔函数为:

frameworks/base/services/core/java/com/android/server/WiredAccessoryManager.java

在setDeviceStateLocked()函数中,有热插拔检测状态值,state=1,表示插入;为0表示拔掉。

接着调用AudioManager.java中函数,AudioManager只是一些实现类,具体的实现在AudioService.java中。

在AudioService.java中,onSetWiredDeviceConnectionState()调handleDeviceConnection()函数.

handleDeviceConnection()通过binder往下调用。具体实现如下:


实现图

具体实现有两个逻辑,总的来说,就是插入设备,把设备号加入数组,拔掉设备,在数组里删除设备号。

AudioSystem.setDeviceConnectionState()通过jni调用到AudioSystem.cpp,AudioSystem只是一些接口类,具体实现在AudioPolicyManager.cpp中的AudioPolicyManager::setDeviceConnectionStateInt()函数中,原理大致相同:



总结,插拔存取当前device设备的数组有两个,一个在java层,一个在nativce层,它们都用来保存当前连接可用,硬件支持的设备。热插拔就是把设备号分别在java层和native层在可用设备数组里进行添加和删除的过程。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,962评论 25 709
  • 2008 11-01 一位自称中本聪(Satoshi Nakamoto)在一个隐秘的密码学讨论组metzdowd....
    天梁武帝阅读 2,720评论 0 1
  • 图/文,一米阳光的明媚,荣耀8 一年到头停不下来奔波,其实有时候奔波走走也挺好,证明还活的比较鲜活 留下途经城市的...
    职场共舞阅读 1,783评论 0 3
  • 01
    小秋颖阅读 1,778评论 0 0
  • 彩虹的约定-酷我音乐 记得我小的时候,六一节我们会这样美美地打扮一下 然后就感觉自己真的可以 得意的笑~得意的笑~...
    羊咩咩206阅读 4,751评论 0 0

友情链接更多精彩内容