2012-04-11 10 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に行く必要があります –

+0

BATTERY_HEAL_C_COLDは何を意味していますか?バッテリーが寒すぎる可能性がありますか?それは何のダメージを与えますか? –

+0

バッテリが寒いと、あまり電流を供給できません。 – SytS

答えて

2

リチウムイオン電池は、追跡し、健康を報告し、単純なオンボードコンピュータを持っています。状態インジケータは標準化されていますが、バッテリによって通知される条件はバッテリ製造元によって決定されます。あなたは、バッテリに関する情報を得ることができ、このコードを使用することにより

+0

ありがとう!私はあなたの答えを本当に感謝します - これは意味をなさない!さらにいくつかの質問があります: 1)アンドロイドにはバッテリのオンボードコンピュータからレポートを受け取るイベントリスナーコードがありますか?あなたは私に例を教えてくれますか? 2)そうでない場合は、これはファームウェアレベルで行われますか? 3)サードパーティのバッテリメーカー(非OEMのもの)は、レポートを模倣する特定の仕様に準拠していなければなりませんか? – simonso

+0

Androidに関する詳細はわかりません。私はリチウムイオン電池について話していましたが、これはまったく同じです(スマート充電器回路が必要ですが、その回路はバッテリのために調整する必要があるため、バッテリの一部です)。 http://android.stackexchange.comでお尋ねください。 – geekosaur

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( "健康"、0)によって返された値を決定した人です。 前の答えは理にかなっていました。リチウムイオンバッテリの車載コンピュータからのものです。私はその部分がどのように行われているのかを探しています。 – simonso

6

具体的には:バッテリーの健康は(カーネル内の)ドライバによって決定されます。このドライバは、sysファイルシステム(正確には/ sys/class/power_supply)を介して情報をエクスポートします。 Androidデーモンhealthd(KK、4.4.x現在)はこの情報を取得し、IBatteryPropertiesRegistrarインターフェースを実装しています。継続的にポーリングします(epoll_waitを使用して定期的な更新のタイムアウトループを実行し、POWERサブシステムのネットリンク通知 - たとえば、充電器を接続または切断する場合など)。システムの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 

をチェックアウトしたファイルを見ることで、すべての詳細が明らかにされます。

関連する問題