我尝试过Android的powerprofile ....我试过这段代码......但是每次在所有设备上都给我1000个答案...... Android中有没有其他方法可以获得电池容量...... 例如,如果移动设备容量为2000mAh,则应该返回2000
public Double getBatteryCapacity() {
Object mPowerProfile_ = null;
double batteryCapacity = 0;
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) {
// Class not found?
e.printStackTrace();
}
try {
// Invoke PowerProfile method "getAveragePower" with param
// "battery.capacity"
batteryCapacity = (Double) Class.forName(POWER_PROFILE_CLASS)
.getMethod("getAveragePower", java.lang.String.class)
.invoke(mPowerProfile_, "battery.capacity");
} catch (Exception e) {
// Something went wrong
e.printStackTrace();
}
return batteryCapacity;
}
答案 0 :(得分:8)
对于那些对实施@Yehan建议感兴趣的用户,这里有一个返回总电池容量的方法:(仅适用于API Level> = 21)
public long getBatteryCapacity(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
BatteryManager mBatteryManager = (BatteryManager) context.getSystemService(Context.BATTERY_SERVICE);
Integer chargeCounter = mBatteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);
Integer capacity = mBatteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
if(chargeCounter == Integer.MIN_VALUE || capacity == Integer.MIN_VALUE)
return 0;
return (chargeCounter/capacity) *100;
}
return 0;
}
不幸的是,出于某种原因,这种方法并不总是有效。在这些情况下,您可以使用Java的Reflection API来检索com.android.internal.os.PowerProfile的getBatteryCapacity方法返回的值:
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;
}
答案 1 :(得分:1)
您可以使用android.os.BatteryManager的以下属性。 BATTERY_PROPERTY_CHARGE_COUNTER以微安培小时为您提供剩余电池容量。 BATTERY_PROPERTY_CAPACITY以整数百分比为单位提供剩余电池容量。
所以,
BATTERY_PROPERTY_CHARGE_COUNTER / BATTERY_PROPERTY_CAPACITY * 100
会给你总电池容量。这不是精确的计算,但您可以关闭实际容量。
参考文献: https://source.android.com/devices/tech/power/index.html#device-power http://developer.android.com/reference/android/os/BatteryManager.html