硬件环境:板子上有两个usb口,一个是mini usb,用作系统供电,一个是mirco usb,用作调试口,该usb口的电由mini usb提供,且该usb口不能主动给系统供电。
软件逻辑:应用服务检测到系统充电器拔出的时候会关闭系统
问题:在mini口插入充电器的情况下,往mirco usb口插入usb otg设备的时候,系统也会关机
经研究,导致该问题出现的原因,android系统默认硬件只有一个usb口,你把该usb当做otg口用的时候,系统就认为当前不是处于插入充电器状态,所以会把/sys/class/power_supply/ac/online的值清零,导致上报广播ACTION_POWER_DISCONNECTED给系统,最后导致系统关机
解决办法是,更改kernel层插入usb设备时候的检测逻辑。具体分析思路和解决过程及方案如下:
1.首先要大致了解下android的电池管理框架
Android系统中对电池的管理驱动层继承了linux下的power supply class,而在用户层则是在BatteryService.java中通过广播的方式将电池相关的属性上报给上层app使用。这些属性都是在java中声明,在jni中调用更新的。