我知道有很多这样的问题,但我需要一个具体的答案,无论是否可能。
我想获取任何 Android 手机当前可用的电池电量(以 mAh 为单位)。这对我的项目至关重要。我试过 BatteryManager。
batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);
它准确地提供了我需要的信息,但仅适用于某些设备。
我还尝试通过 Java 反射使用 PowerProfile。
public void getBatteryCapacity() {
Object mPowerProfile_ = null;
final String POWER_PROFILE_CLASS = "com.android.internal.os.PowerProfile";
try {
mPowerProfile_ = Class.forName(POWER_PROFILE_CLASS)
.getConstructor(Context.class).newInstance(this);
} catch (Exception e) {
e.printStackTrace();
}
try {
double batteryCapacity = (Double) Class
.forName(POWER_PROFILE_CLASS)
.getMethod("getAveragePower", java.lang.String.class)
.invoke(mPowerProfile_, "battery.capacity");
Toast.makeText(OffloadeeActivity.this, batteryCapacity + " mAh",
Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
}
}
但它提供了电池的总容量。我需要的是当前剩余的电池电量。 是否有任何通用的方法可以为每台设备获取它?任何图书馆也可以。
最佳答案
这可以通过获取以毫安小时为单位的总电池容量,然后找到电池电量的百分比,最后将它们相乘以获得以毫安小时为单位的当前电池生命周期来实现。以下代码块是获取电池的总容量(以毫安小时为单位)的函数:
public 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();
}
return batteryCapacity;
}
现在您已经有了电池容量,您可以找到当前电池生命周期的百分比,然后将其乘以总容量以获得以毫安小时为单位的电量:
BatteryManager bm = (BatteryManager)getSystemService(BATTERY_SERVICE);
int batLevel = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
如果您想以 float 的形式返回电池百分比水平,(示例 89.92%),您可以使用以下代码:
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batLevel = (float) level / (float) scale;
现在,您可以执行以下操作来获得毫安小时的电池生命周期:
int batteryInMilliamps = getBatteryCapacity(getApplicationContext()) * batLevel;
如果您收到任何问题或有任何疑问,请在下方发表评论。
关于android - 获取电池电量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54038290/