android开发 电池与电量

前言

  此篇博客讲解电池与电量的开发

代码部分

电量监听

    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
获取某个apk的电量消耗信息:
adb shell dumpsys batterystats  com.Package.name | more
由于输出信息太多,可使用命令more 或者 less 分篇查看, 输出信息如下(由于篇幅,只粘贴部分):
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值