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 {
Slog.i(TAG, "Wired Accessory Observer");
// Listen for wired headset changes
new WiredAccessoryObserver(

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

被折叠的 条评论
为什么被折叠?



