天天看點

Android擷取電池電量

方法一:注冊廣播(被動接受)

IntentFilter filter2 = new IntentFilter();
filter2.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(filter2,receiver);
接收到廣播後,用getIntExtra("level")和getIntExtra("scale")獲得相應值
intent.getIntExtra("level", 0);    ///電池剩餘電量
intent.getIntExtra("scale", 0);  ///擷取電池滿電量數值
intent.getStringExtra("technology");  ///擷取電池技術支援
intent.getIntExtra("status",BatteryManager.BATTERY_STATUS_UNKNOWN); ///擷取電池狀态
intent.getIntExtra("plugged", 0);  ///擷取電源資訊
intent.getIntExtra("health",BatteryManager.BATTERY_HEALTH_UNKNOWN);  ///擷取電池健康度
intent.getIntExtra("voltage", 0);  ///擷取電池電壓
intent.getIntExtra("temperature", 0);  ///擷取電池溫度
           

方法二:通過執行指令(不需要root)

通過

adb shell dumpsys battery

,傳回結果後有電池的各種資訊,其中就包括level(百分比)

C:\Users\ShawnXia>adb shell dumpsys battery
Current Battery Service state:
  AC powered: false ///有線充電器狀态
  USB powered: true ///USB連接配接狀态
  Wireless powered: false ///無線充電狀态
  Max charging current: 500000 ///最大充電電流,機關微安(uA)
  Max charging voltage: 5000000 ///最大充電電壓,機關微伏(uV)
  Charge counter: 4149000 ///
  status: 2 ///充電狀态,UNKNOWN=1,CHARGING=2,DISCHARGING=3,NOT_CHARGING=4,FULL=5
  health: 2 ///電池健康狀态
  present: true ///
  level: 95 ///目前95%
  scale: 100 ///滿電100%
  voltage: 4244 ///電壓
  temperature: 250 ///溫度
  technology: Li-ion
           

方法三:通過 BatteryManager

API >= 21 (5.0,L)
BatteryManager manager = (BatteryManager) getSystemService(BATTERY_SERVICE);
manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);
manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE);
manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW);
manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);///目前電量百分比
API >= 26 (8.0,O)
manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_STATUS);///充電狀态
           

在編寫uiautomator測試腳本時,用了方法二。然後處理一下字元串。