gpt4 book ai didi

java - 是否有系统变量保存 Android 设备特定的低电量阈值?

转载 作者:行者123 更新时间:2023-11-29 09:03:31 27 4
gpt4 key购买 nike

我正在检查电池是否已达到临界水平。

当电池在任一方向超过低电量阈值时,Android 会向您的应用发送一个 Intent 。但这仅在您的应用程序运行时超过阈值时才有效( Intent 不粘,因此它不会徘徊)。因此,如果用户打开应用程序时它很低,那么你就不走运了(或者至少是信息)。

还有一个粘性 Intent ACTION_BATTERY_CHANGED,它包含有关电池电量的信息和用于计算百分比的刻度,这很棒。但是,我一直无法找到包含低电量阈值的系统变量(它显然因设备而异)。

通过搜索,我发现:When android fires ACTION_BATTERY_LOW ,Android 系统代码的源代码列表,它使用系统变量 com.android.internal.R.integer.config_lowBatteryWarningLevel。但是,我自己一直无法访问这个变量(我猜它是 protected )。

我希望有一个合理的标准来比较我的电池百分比,这样我就知道什么时候关闭电池密集型功能。就是这样。

这是我的代码:

private BroadcastReceiver powerListener = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
int batteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
int batteryScale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 1);
int batteryPercentLeft = (batteryLevel * 100) / batteryScale;

if (batteryPercentLeft <= com.android.internal.R.integer.config_lowBatteryWarningLevel) {
_thread.onBatteryStateReceived(DataModel.BatteryState.LOW);
}
}
};

我收到系统变量的编译错误。有其他选择吗?看起来这应该是一件简单的事情。我只想匹配系统行为,没什么特别的。

最佳答案

请注意,这可能的,但使用了反射,因此不应依赖:

    try {
Class clazz = Class.forName("com.android.internal.R$integer");
Field field = clazz.getDeclaredField("config_lowBatteryWarningLevel");
field.setAccessible(true);
int LowBatteryLevel = _context.getResources().getInteger(field.getInt(null));
Log.d("LowBattery","warninglevel " + LowBatteryLevel);
} catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}

来源:https://stackoverflow.com/a/49424298/608312

关于java - 是否有系统变量保存 Android 设备特定的低电量阈值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16176203/

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