想了解这个机制。当充电、充电完成已经拔出电源时,android是怎么知道的?如果要访问驱动,是哪个驱动完成的工作?驱动名称?

解决方案 »

  1.   

    android开机时会启动BatteryService电池及充电相关的服务,当充电、充电完时BatteryService会发送
    Intent.ACTION_BATTERY_CHANGED的BroadcastReceiver,你注册该广播就可以收到了
      

  2.   

    对应于linux驱动这层,是哪个驱动在维护?
      

  3.   

    源码在
    Android-2.3\frameworks\base\services\java\com\android\server\BatteryService.java
    Android-2.3\frameworks\base\services\jni\com_android_server_BatteryService.cpp
    里面定义了获取状态的方法
    static jint getBatteryStatus(const char* status)
    {
        switch (status[0]) {
            case 'C': return gConstants.statusCharging;         // Charging
            case 'D': return gConstants.statusDischarging;      // Discharging
            case 'F': return gConstants.statusFull;             // Not charging
            case 'N': return gConstants.statusNotCharging;      // Full
            case 'U': return gConstants.statusUnknown;          // Unknown
                
            default: {
                LOGW("Unknown battery status '%s'", status);
                return gConstants.statusUnknown;
            }
        }
    }static jint getBatteryHealth(const char* status)
    {
        switch (status[0]) {
            case 'D': return gConstants.healthDead;         // Dead
            case 'G': return gConstants.healthGood;         // Good
            case 'O': {
                if (strcmp(status, "Overheat") == 0) {
                    return gConstants.healthOverheat;
                } else if (strcmp(status, "Over voltage") == 0) {
                    return gConstants.healthOverVoltage;
                }
                LOGW("Unknown battery health[1] '%s'", status);
                return gConstants.healthUnknown;
            }
            
            case 'U': {
                if (strcmp(status, "Unspecified failure") == 0) {
                    return gConstants.healthUnspecifiedFailure;
                } else if (strcmp(status, "Unknown") == 0) {
                    return gConstants.healthUnknown;
                }
                // fall through
            }
                
            default: {
                LOGW("Unknown battery health[2] '%s'", status);
                return gConstants.healthUnknown;
            }
        }
    }
      

  4.   

    电源管理驱动里找下\drivers\power\xxx_battery.c