gpt4 book ai didi

java - 在 Android 上获取准确的电池电量

转载 作者:行者123 更新时间:2023-12-01 12:00:02 25 4
gpt4 key购买 nike

因此,我目前在我的 Android 应用程序中实现了以下常用方法来获取当前电池电量。

int getBatteryPercent(){
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = this.registerReceiver(null, ifilter);
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
return level;
}

问题是它返回一个 0-100 之间的整数。为了确保我的算法之一的准确性,我需要能够更精确地测量电池电量。我见过一些电池管理应用程序显示了可以完美工作的 mV。如果有人知道如何获得这个值,我们将不胜感激。

澄清一下:我需要当前的电池电量,而不是电池的总容量。

谢谢!

------------------------更新---------------------- -----

我现在使用以下代码:

    // Method for getting the current battery percentage
int getBatteryPercent(){
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = this.registerReceiver(null, ifilter);
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
return level;
}

// Method for getting the total battery capacity
double getBatteryCapacity() {
double battCapacity = 0.0d;
Object mPowerProfile_ = null;

Log.d("Debug", "in getBatteryCapacity()");

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();
Log.d("Debug", "Try 1 - Exception e: " + e.toString());
}

try {
battCapacity = (Double) Class
.forName(POWER_PROFILE_CLASS)
.getMethod("getAveragePower", java.lang.String.class)
.invoke(mPowerProfile_, "battery.capacity");
Log.d("Debug", "battCapacity is now: " + battCapacity);
} catch (Exception e) {
e.printStackTrace();
Log.d("Debug", "Try 2 - Exception e: " + e.toString());
}

Log.d("Debug", "Leaving getBatteryCapacity()");
return battCapacity;
}

// Method for getting the exact current battery level
double getExactBattery(){
Log.d("Debug", "In getExactBattery()");
float batteryPercentage = getBatteryPercent();
Log.d("Debug", "batteryPercentage = " + batteryPercentage);
double totalCapacity = getBatteryCapacity();
Log.d("Debug", "totalCapacity = " + totalCapacity);
double currLevel = (totalCapacity * (double)batteryPercentage) / 100.0d;
Log.d("Debug", "currLevel = " + currLevel);
return currLevel;
}

但是 getBatteryCapacity 方法给了我 0.0 返回值:

01-20 06:37:27.314    7162-7162/com... D/Debug﹕ In getExactBattery()
01-20 06:37:27.324 7162-7162/com... D/Debug﹕ batteryPercentage = 47.0
01-20 06:37:27.329 7162-7162/com... D/Debug﹕ in getBatteryCapacity()
01-20 06:46:00.644 9207-9207/com... D/Debug﹕ battCapacity is now: 0.0
01-20 06:37:27.329 7162-7162/com... D/Debug﹕ Leaving getBatteryCapacity()
01-20 06:37:27.329 7162-7162/com... D/Debug﹕ totalCapacity = 0.0
01-20 06:37:27.329 7162-7162/com... D/Debug﹕ currLevel = 0.0
<小时/>

我有一个在 Android 4.4.4 上运行的 Droid Ultra,此代码不起作用,它返回 0.0,但是当在具有多个 Android 版本的模拟器上运行时,它实际上可以工作。我很想知道在 Droid Ultra 上测试的其他用户是否也有同样的问题。上面的代码应该适用于大多数设备。

这实际上不是确切的电池电量。使用此算法,如果电池百分比为 97%,总容量为 1000,则准确的电池电量将显示为 970。现在,如果实际电池百分比为 96.7%,我的 getBatteryPercent 将返回 97。这将得到相同的确切答案。所以这个算法不是这个问题的答案。我还在寻找这个问题的答案!!!我需要比 +-1% 更精确的电池电量测量...

------------------------更新---------------------- -----

我发现如果您在广播接收器中使用 getIntExtra("Voltage", -1) 监听 ACTION_BATTERY_CHANGED。它为您提供 mV。我想知道这个值是否足够可靠,可以用于电池生命周期预测。有谁知道我可以在任何时间点获取电压而不依赖广播接收器的最新更新的方法吗?

编辑:事实证明它不可行。 this graph表明电池电压是电池容量的一个非常差的指标。

最佳答案

根据@user87049的链接获取电池容量,并使用您自己的函数获取当前电池百分比,并将这两者结合起来得到当前容量。

int batteryPercentage = getBatteryPercentage() //Your function
double batteryCapacity = getBatteryCapacity() //code from link from user87049. Change it to return value
double currentCapacity = (batteryPercentage * batteryCapacity) / 100

关于java - 在 Android 上获取准确的电池电量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28043112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com