美文网首页Android开发技巧
android 电量相关APi

android 电量相关APi

作者: 真胖大海 | 来源:发表于2019-12-23 17:31 被阅读0次

一.通过广播获取到的信息

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);  //获取电池电压,单位为mV
intent.getIntExtra("temperature", 0);  //获取电池温度,获取到的值除以10以后得到℃
  1. level和scale获取的不是电量的绝对值,只能使用levle/scale获取剩余电量的百分比
  2. 获取电池健康状态
 val health =
                intent.getIntExtra("health", BatteryManager.BATTERY_HEALTH_UNKNOWN)  ///获取电池健康度
            when (health) {
                BatteryManager.BATTERY_HEALTH_GOOD -> {
                    tv_battery_health.text = "良好"
                }
                BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE -> {
                    tv_battery_health.text = "电压过高"
                }
                BatteryManager.BATTERY_HEALTH_COLD -> {
                    tv_battery_health.text = "过冷"
                }
                BatteryManager.BATTERY_HEALTH_DEAD -> {
                    tv_battery_health.text = "损坏"
                }
                BatteryManager.BATTERY_HEALTH_OVERHEAT -> {
                    tv_battery_health.text = "过热"
                }
                else -> {
                    tv_battery_health.text = "未知"
                }
            }

3.获取电池充电状态

intent.getIntExtra("status",BatteryManager.BATTERY_STATUS_UNKNOWN); //获取电池状态

   获取到的值有以下情况

    public static final int BATTERY_STATUS_UNKNOWN 
    public static final int BATTERY_STATUS_CHARGING  //充电中
    public static final int BATTERY_STATUS_DISCHARGING  //放电中
    public static final int BATTERY_STATUS_NOT_CHARGING //未充电
    public static final int BATTERY_STATUS_FULL  //已充满
  1. 获取充电方式

intent.getIntExtra("plugged", 0); //获取充电方式

int BATTERY_PLUGGED_AC  使用充电器充电
int BATTERY_PLUGGED_USB     使用USB充电
int BATTERY_PLUGGED_WIRELESS    使用无线方式充电

二.通过dumpsys battery获取到的信息

adb shell dumpsys battery

  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获取到的信息

经测试: BATTERY_PROPERTY_CURRENT_NOW和BATTERY_PROPERTY_CURRENT_AVERAGE获取到的数据并不准确
测量设备电耗

API >= 21 (5.0,L)
BatteryManager manager = (BatteryManager) getSystemService(BATTERY_SERVICE);
manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);//剩余电量,单位 (mAH)微安小时
manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE);//当前电流,单位mA
manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW);//当前电流,单位mA
manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);///当前电量百分比
API >= 26 (8.0,O)
manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_STATUS);///充电状态

获取电池的总容量

  public static double getBatteryCapacity(Context context) {
        Object mPowerProfile;
        double batteryCapacity = 0;
        final String POWER_PROFILE_CLASS = "com.android.internal.os.PowerProfile";

        try {
            mPowerProfile = Class.forName(POWER_PROFILE_CLASS)
                    .getConstructor(Context.class)
                    .newInstance(context);

            batteryCapacity = (double) Class
                    .forName(POWER_PROFILE_CLASS)
                    .getMethod("getBatteryCapacity")
                    .invoke(mPowerProfile);

        } catch (Exception e) {
            e.printStackTrace();
        }

        String info = batteryCapacity + " mAh";
        Log.i(TAG,"电池容量是: "+batteryCapacity);
        return batteryCapacity;
    }

知道电池总容量后可以根据当前电量的百分比,计算出当前电量。

相关文章

  • android 电量相关APi

    一.通过广播获取到的信息 level和scale获取的不是电量的绝对值,只能使用levle/scale获取剩余电量...

  • WebRTC Android API

    WebRTC Android API WebRTC For Android相关的API有VideoCapturer...

  • Android M 以上 电量优化分析

    电量优化一直是Android 开发中的头等问题。本篇将分析一下Android M 以上电量优化措施电量优化相关的部...

  • iOS电池相关API

    iOS电池相关API iOS系统中关于电池的Api较少,据本人了解目前仅有两种电视相关的Api,一种是电量状态,一...

  • Android 监听电量的状态

    Android 电量相关的内容 监控手机电量的变化和充电状态 在BatteryManager中有一个粘性广播,不需...

  • 2021-11-05

    Android OpenGL es 相关1、# Android多媒体--MediaCodec 中文API文档[ht...

  • 浅谈Android系统的电量统计机制

    背景 为了完善产品的工具属性,进行了Android统计电量相关特性的调研。 提出问题 Android 对于每个进程...

  • Android前台Service的一个骚操作

    最近在学习Android camera2相关的API,突然发现如果将camera相关的api与前台service相...

  • Android系统联系人相关介绍以及具体的用法

    概述 本文主要解读Android系统联系人相关的知识,以及展示联系人相关的操作实例。参考Android官方API。...

  • 关于Android文件的那些事

    前言 在了解Android文件相关知识前,先来了解下Android文件相关常用的API 输出如下: 1、获取文件夹...

网友评论

    本文标题:android 电量相关APi

    本文链接:https://www.haomeiwen.com/subject/pkpznctx.html