Android 耳机检测

本文介绍了Android系统中耳机检测的实现,主要通过UEvent机制完成,涉及WiredAccessoryObserver类和HeadsetObserver的差异。在Android 4.0及以上版本,耳机检测集中在WiredAccessoryObserver,检测设备包括headset、usb_headset和hdmi_audio。该服务在系统初始化时启动,并使用UEventObserver进行设备状态监控,同时注册广播接收器响应ACTION_BOOT_COMPLETED事件。
摘要由CSDN通过智能技术生成

UEvent机制在Android中的应用,就我所知,USB的插拔和耳机的插拔检测都是通过UEvent来实现的。下面的例子,首先说明代码中是如何实现检测的,后面的文章再详细说明UEvent机制。


在Android4.0以上的版本,耳机检测的源文件位于frameworks/base/services/java/com/android/server/WiredAccessoryObserver.java,在android4.0以前是HeadsetObserver.java。从名字可以看出,它主要是用来检测有线的设备连接状态。

USB也是有线设备,但它的检测代码是独立的,位于frameworks/base/services/java/com/android/server/usb/usbdevicemanager.java。


首先,来看耳机检测的机制。

在WiredAccessoryObserver中,主要检测以下几个设备的连接状态(参考函数makeObservedUEventList(),其实就是生成要检测的设备文件节点路径)

1.headset

2.usb_headset

3.hdmi_audio/hdmi

都是与audio相关的设备,一般来说,headset都是支持的,后面的两种设备不是所有平台都支持。


从代码路径可以知道,位于service目录,因此可以猜想它是在android system server初始化的时候实例化的。在system server的serverthread 的run()函数中有如下代码:

            try {
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值