观心静

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  422 随笔 :: 0 文章 :: 86 评论 :: 139万 阅读

前言

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

代码部分

电量监听

复制代码
    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:
    -d04h22m36s181ms 044 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

posted on   观心静  阅读(1292)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示