前言
此篇博客讲解电池与电量的开发
代码部分
电量监听
private fun initBatteryReceiver() {
mBatteryReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
//电压
val voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0);
mBinding.voltage.text = "电压:" + voltage / 1000 + "." + voltage % 1000 + "V"
//温度
val temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0);
mBinding.temperature.text = "温度:" + temperature / 10 + "." + temperature % 10 + "℃"
if (temperature >= 300) {
mBinding.temperature.setTextColor(Color.RED)
} else {
mBinding.temperature.setTextColor(Color.BLUE)
}
//电量
val level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
val scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0);
val levelPercent = ((level / scale) * 100)
mBinding.electricity.setText("电量:" + levelPercent + "%")
if (level <= 10) {
mBinding.electricity.setTextColor(Color.RED);
} else {
mBinding.electricity.setTextColor(Color.BLUE);
}
//充电状态
val status = intent.getIntExtra(
BatteryManager.EXTRA_STATUS,
BatteryManager.BATTERY_STATUS_UNKNOWN
)
val strStatus = when (status) {
BatteryManager.BATTERY_STATUS_CHARGING -> "充电中"
BatteryManager.BATTERY_STATUS_DISCHARGING -> "放电中"
BatteryManager.BATTERY_STATUS_NOT_CHARGING -> "未充电"
BatteryManager.BATTERY_STATUS_FULL -> "充电完成"
else -> "未知状态"
}
mBinding.status.text = "状态:" + strStatus
val health = intent.getIntExtra(
BatteryManager.EXTRA_HEALTH,
BatteryManager.BATTERY_HEALTH_UNKNOWN
)
mBinding.healthStatus.text = when (health) {
BatteryManager.BATTERY_HEALTH_GOOD -> "健康状况:好"
BatteryManager.BATTERY_HEALTH_OVERHEAT -> "健康状况:过热"
BatteryManager.BATTERY_HEALTH_DEAD -> "健康状况:良好"
BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE -> "健康状况:电压过高"
BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE -> "健康状况:未知"
BatteryManager.BATTERY_HEALTH_COLD -> "健康状况:过冷"
else -> "健康状况:未知"
}
val technology = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);
mBinding.batteryTechnology.text = "电池技术:" + technology;
}
}
registerReceiver(this.mBatteryReceiver, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
}
adb命令部分
adb命令:adb shell dumpsys battery
得到信息如下:
AC powered: false
USB powered: true
Wireless powered: false
status: 1 #电池状态:2:充电状态 ,其他数字为非充电状态
health: 2
present: true
level: 55 #电量: 百分比
scale: 100
voltage: 3977
current now: -335232
temperature: 335 #电池状态
technology: Li-poly
改变手机电池状态
手机连接到电脑,默认为充电状态
切换手机电池为非充电状态:
adb shell dumpsys battery set status 1
改变手机电量
让手机电量显示百分百:
adb shell dumpsys battery set level 100
让手机电量显示1:
adb shell dumpsys battery set level 1
获取电量消耗信息
获取整个设备的电量消耗信息:
adb shell dumpsys batterystats | more
adb shell dumpsys batterystats com.Package.name | more
Battery History:
-d04h22m36s181ms044 20080000 status=charging health=good plug=usb temp=335 volt=3809 +plugged +sensor
-d04h21m27s713ms 044 40a0000 +wifi +wifi_running +wake_lock
-d04h21m23s278ms 044 c0a0100 +phone_scanning phone_state=out
-d04h21m19s102ms 044 c0a0100 -wake_lock
-d04h21m05s005ms 044 c0a0100 +wake_lock
-d04h20m51s486ms 044 d0a0100 +wifi_scan
-d04h20m49s211ms 044 c0a0100 -wifi_scan
-d04h20m41s478ms 044 c0a0100
-d04h20m31s476ms 044 d0a0100 +wifi_scan
-d04h20m29s174ms 044 c0a0100 -wifi_scan
-d04h20m24s353ms 044 c0a0100 -wake_lock
-d04h20m21s474ms 044 d0a0100 +wifi_scan +wake_lock
-d04h20m21s125ms 044 d0a0100
-d04h20m16s847ms 044 c0a0100 -wifi_scan -wake_lock
第三方项目
电量消耗信息
关于电量,主要是通过battery-historian工具来获取。
https://github.com/google/battery-historian
end