我知道有很多这样的问题,但是无论是否可行,我都需要一个具体的答案。
我想为任何Android手机获取以mAh为单位的当前可用电池电量。这对我的项目至关重要。我尝试了BatteryManager。
batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);
它确实提供了我需要的信息,但仅适用于某些设备。
我还尝试通过Java Reflection使用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();
}
}
但是它提供了总电池容量。我需要的是当前剩余的电池电量。 有什么通用的方法可以为每台设备获得该功能吗?任何图书馆也可以。
答案 0 :(得分:0)
您尝试此操作将对您有所帮助
public static int getBatteryPercentage(Context context) {
IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, iFilter);
int level = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) : -1;
int scale = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1) : -1;
float batteryPct = level / (float) scale;
return (int) (batteryPct * 100);
}
答案 1 :(得分:0)
这可以通过获得以毫安小时为单位的总电池容量,然后找到电池电量的百分比,最后将它们相乘得出当前以毫安小时为单位的电池寿命来实现。以下代码块是用于获取电池的总容量(以毫安小时为单位)的功能:
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);
如果要以浮点数的形式返回电池电量百分比,(示例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;
如果您有任何问题或疑问,请在下面发表评论。