首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >所有属性检索调用返回0的Android BatteryManager

所有属性检索调用返回0的Android BatteryManager
EN

Stack Overflow用户
提问于 2015-08-29 06:20:20
回答 3查看 4.2K关注 0票数 4

我无法从安卓设备的电池(如BATTERY_PROPERTY_CAPACITYBATTERY_PROPERTY_CHARGE_COUNTERBATTERY_PROPERTY_CURRENT_AVERAGE )获取大部分数据。这些属性都清楚地记录在这里:http://developer.android.com/reference/android/os/BatteryManager.html

我在我的清单上声明了以下权限:

代码语言:javascript
复制
<uses-permission android:name="android.permission.BATTERY_STATS" />

我有一个非空的BatteryManager实例:

代码语言:javascript
复制
mBatteryManager = (BatteryManager) getSystemService(BATTERY_SERVICE);

每当我尝试检索这些统计数据时:

代码语言:javascript
复制
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。我已经在一个模拟器上尝试过了,一个实际的设备,我所想到的一切都无法修改我的结果。

如果有任何帮助,我将非常感激。最终,我想要做的是计算设备充满电的剩余时间(充电时)。提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2015-10-30 04:35:37

不确定这对你现在是否有帮助,但只有有电池燃料表(https://source.android.com/devices/tech/power/device.html)的手机才能报告你正在寻找的一些值。AFAIK,只有Nexus6、Nexus9和Nexus10给出了你想要的所有三个值,Nexus5只给出了BATTERY_PROPERTY_CAPACITY

票数 4
EN

Stack Overflow用户

发布于 2015-08-29 07:24:48

您需要注册Action_Battery_Changed广播。每当发生此事件时,都会调用此方法。由于这是一个粘性意图,一旦注册,它就会继续广播。下面的方法将获得当前的电池电量。

代码语言:javascript
复制
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);
}
票数 0
EN

Stack Overflow用户

发布于 2016-01-08 04:03:42

BatteryManager.EXTRA_LEVEL的值是当前电池容量。我猜你正在寻找总容量(满),你需要阅读/sys/class/power_supply/battery/charge_full_design或charge_full,不同的制造商可能有不同的路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32280582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档