我在尝试访问Android设备的大部分统计信息时遇到问题,例如BATTERY_PROPERTY_CAPACITY
,BATTERY_PROPERTY_CHARGE_COUNTER
或BATTERY_PROPERTY_CURRENT_AVERAGE
。这些属性都清楚地记录在这里:http://developer.android.com/reference/android/os/BatteryManager.html
我在清单上声明了以下权限:
<uses-permission android:name="android.permission.BATTERY_STATS" />
我有一个非空的BatteryManager实例:
mBatteryManager = (BatteryManager) getSystemService(BATTERY_SERVICE);
每当我尝试检索这些统计数据时:
double remainingCapacity = mBatteryManager.getIntProperty(
BatteryManager.BATTERY_PROPERTY_CAPACITY);
double batteryCapacityMicroAh = mBatteryManager.getIntProperty(
BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);
double averageCurrentMicroA = mBatteryManager.getIntProperty(
BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE);
所有这些结果都是0。总是,没有失败,我已经在模拟器,实际设备上尝试了这一点,而且我所想到的一切都无法修改我的结果。
我非常感谢任何帮助。最终,我尝试做的是计算设备达到完全充电的剩余时间(充电时)。提前谢谢。
答案 0 :(得分:4)
现在不确定这对您是否有任何帮助,但只有配备电池电量计(https://source.android.com/devices/tech/power/device.html)的手机才能报告您正在寻找的部分值。 AFAIK,只有Nexus 6,9和10提供了您正在寻找的所有三个值,而Nexus 5仅提供BATTERY_PROPERTY_CAPACITY
。
答案 1 :(得分:0)
您需要注册Action_Battery_Changed广播。只要发生此事件,就会调用此方法。由于这是一个粘性的意图,它会在注册后继续播放。下面的方法将获得当前的电池水平。
private void getBatteryPercentage() {
BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
context.unregisterReceiver(this);
int currentLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
int level = -1;
if (currentLevel >= 0 && scale > 0) {
level = (currentLevel * 100) / scale;
}
Toast.makeText(MainActivity.this, level + "%", Toast.LENGTH_LONG).show();
}
};
IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryLevelReceiver, batteryLevelFilter);
}
答案 2 :(得分:0)
BatteryManager.EXTRA_LEVEL的值是当前的电池容量。 我猜你正在寻找总容量(全部),你需要读取/ sys / class / power_supply / battery / charge_full_design或charge_full,不同的制造商可能有不同的路径。