原文链接:https://blog.csdn.net/qijian0503/article/details/81910342
亲测可用
上运行结果图
上代码
/**
* 实时获取电量
*/
public static int getSystemBattery(Context context){
int level = 0;
Intent batteryInfoIntent = context.getApplicationContext().registerReceiver(null,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
level = batteryInfoIntent.getIntExtra("level",0);
int batterySum = batteryInfoIntent.getIntExtra("scale", 100);
int percentBattery= 100 * level / batterySum;
Log.i(ControlerInfo.LogTag,"level = " + level);
Log.i(ControlerInfo.LogTag,"batterySum = " + batterySum);
Log.i(ControlerInfo.LogTag,"percent is " + percentBattery+ "%");
return percentBattery;
}
以上代码主要是在注册接收者时,注册了一个空对象进去了,所以也不需要进行注销动作,这样便达到了在只需要简单的电量参数时,调用此方法就行,不需要将具体代码写进广播接收者中去。亲测在低于21 的API 中有效及高于21的 API 中也是可用的。
方式二:
public static int getBatteryRemainingCapacity(Context context){
int batteryRemainingCapacity = 1;
if(Build.VERSION.SDK_INT >= 21){
BatteryManager batteryManager = (BatteryManager)context.getSystemService(Context.BATTERY_SERVICE);
batteryRemainingCapacity = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
}
return batteryRemainingCapacity;
}