2012-04-11 76 views
4

我不是在談論如何讀取價值。如何確定Android電池的健康狀況?

相反,我對如何設置BatteryManager.EXTRA_HEALTH的值感興趣。

它是否來自固件?製造商具體?

什麼決定了這些值?

int BATTERY_HEALTH_COLD 
int BATTERY_HEALTH_DEAD 
int BATTERY_HEALTH_GOOD 
int BATTERY_HEALTH_OVERHEAT 
int BATTERY_HEALTH_OVER_VOLTAGE 
int BATTERY_HEALTH_UNKNOWN 
int BATTERY_HEALTH_UNSPECIFIED_FAILURE 

感謝, 西蒙

+0

這應該去android.stackexchange.com – 2012-04-11 02:16:46

+0

BATTERY_HEALTH_COLD是什麼意思?電池可能太冷?它會造成什麼樣的損害? – 2014-10-16 16:14:52

+0

電池電量不足時,電量不足。 – SytS 2014-11-05 19:50:34

回答

2

鋰離子電池具有跟蹤和報告健康簡單的機載計算機;狀態指示器是標準化的,但觸發它們由電池報告的條件由電池製造商確定。

+0

非常感謝!我非常感謝你的回答 - 這開始有意義!還有幾個問題: 1)android是否有一些事件監聽器代碼可以從電池中的車載電腦中獲取報告?你能給我一個例子嗎? 2)如果沒有,這是在固件級完成的? 3)第三方電池製造商(非OEM廠商)是否必須符合特定規格才能模擬報告? – simonso 2012-04-11 06:14:03

+0

我不知道有關Android的詳細信息;我一般都在談論鋰離子電池,它們幾乎都是相同的(它們需要智能充電器電路,但電路需要針對電池進行調整,因此它是電池的一部分)。建議您在http://android.stackexchange.com上提問。 – geekosaur 2012-04-11 06:18:29

5

通過使用此代碼,你可以得到關於電池信息..

private BroadcastReceiver battery_receiver = new BroadcastReceiver() 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     boolean isPresent = intent.getBooleanExtra("present", false); 
     String technology = intent.getStringExtra("technology"); 
     int plugged = intent.getIntExtra("plugged", -1); 
     int scale = intent.getIntExtra("scale", -1); 
     int health = intent.getIntExtra("health", 0); 
     int status = intent.getIntExtra("status", 0); 
     int rawlevel = intent.getIntExtra("level", -1); 
     int level = 0; 
     String temp=null; 

     Bundle bundle = intent.getExtras(); 

     Log.i("BatteryLevel", bundle.toString()); 

     if(isPresent) 
     { 
      if (rawlevel >= 0 && scale > 0) { 
       level = (rawlevel * 100)/scale; 
      } 

      String info = "Battery Level: " + level + "%\n"; 

      info += ("Technology: " + technology + "\n"); 
      info += ("Plugged: " + getPlugTypeString(plugged) + "\n"); 
      info += ("Health: " + getHealthString(health) + "\n"); 
      info += ("Status: " + getStatusString(status) + "\n"); 
      info += ("Temp: "+getTempStatus(temp,intent)+"\n"); 

      setBatteryLevelText(info + "\n\n" + bundle.toString()); 
     } 
     else 
     { 
      setBatteryLevelText("Battery not present!!!"); 
     } 
    } 
}; 
private void registerBatteryLevelReceiver(){ 
    IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 

    registerReceiver(battery_receiver, filter); 
} 
+2

謝謝,但我最初的問題是,誰確定了intent.getIntExtra(「health」,0)返回的值。 以前的答案很有意義,它來自鋰離子電池的車載電腦。我正在尋找如何完成這一部分。 – simonso 2012-04-11 18:36:09

6

更具體:電池運行狀況由驅動程序(內核)來確定。所述驅動程序通過sys文件系統導出信息(確切地說,/ sys/class/power_supply)。 Android守護進程健康狀態(從KK開始,4.4.x)會獲取此信息,並在其上實現IBatteryPropertiesRegistrar接口。它連續輪詢(使用epoll_wait在定期更新的超時循環中運行,以及POWER子系統的netlink通知 - 例如,如果您連接或斷開充電器)。該系統的BatteryStatsService然後註冊與healthd(通過粘合劑)的監聽器,然後獲得由healthd公佈的數據,

退房/ SYS /班/ POWER_SUPPLY,你會看到:

lrwxrwxrwx root  root    1970-02-05 14:20 ac -> ../../devices/f9923000.i2c/i2c-84/84-006b/power_supply/ac 
lrwxrwxrwx root  root    1970-02-05 14:20 batt_therm -> ../../devices/battery_tm_ctrl.78/power_supply/batt_therm 
lrwxrwxrwx root  root    1970-02-05 14:20 battery -> ../../devices/f9923000.i2c/i2c-84/84-0036/power_supply/battery 
lrwxrwxrwx root  root    1970-02-05 14:20 touch -> ../../devices/virtual/power_supply/touch 
lrwxrwxrwx root  root    1970-02-05 14:20 usb -> ../../devices/msm_dwc3/power_supply/usb 
lrwxrwxrwx root  root    1970-02-05 14:20 wireless -> ../../devices/bq51013b_wlc.77/power_supply/wireless 

然後檢查出「電池」

/sys/devices/f9923000.i2c/i2c-84/84-0036/power_supply/battery: 
-r--r--r-- root  root   4096 2014-02-26 13:26 capacity 
-r--r--r-- root  root   4096 2014-02-26 13:26 charge_full_design 
-r--r--r-- root  root   4096 2014-02-26 13:26 current_now 
lrwxrwxrwx root  root    2014-02-26 13:26 device -> ../../../84-0036 
-r--r--r-- root  root   4096 2014-02-26 13:26 health 
drwxr-xr-x root  root    2014-02-26 13:26 power 
-r--r--r-- root  root   4096 2014-02-26 13:26 present 
-r--r--r-- root  root   4096 2014-02-26 13:26 status 
lrwxrwxrwx root  root    2014-02-26 13:26 subsystem -> ../../../../../../class/power_supply 
-r--r--r-- root  root   4096 2014-02-26 13:26 technology 
-r--r--r-- root  root   4096 2014-02-26 13:26 temp 
-r--r--r-- root  root   4096 2014-02-26 13:26 type 
-rw-r--r-- root  root   4096 2014-02-26 13:26 uevent 
-r--r--r-- root  root   4096 2014-02-26 13:26 voltage_max_design 
-r--r--r-- root  root   4096 2014-02-26 13:26 voltage_min_design 
-r--r--r-- root  root   4096 2014-02-26 13:26 voltage_now 

並通過查看文件,所有的細節將被揭示。

相關問題