android 电量只能通过广播读取吗,android 电量相关APi

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

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以后得到℃

level和scale获取的不是电量的绝对值,只能使用levle/scale获取剩余电量的百分比

获取电池健康状态

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 //已充满

获取充电方式

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;

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值