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

标签 java android android-intent default batterylevel

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

当电池在任一方向超过低电量阈值时,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/

相关文章:

java - 序列化 Spring BindingAwareModelMap

java - Jackson JSON 类结构

c# - 为什么很多编程语言中的集合并不是真正的集合?

java - 更改向上箭头颜色后标记为私有(private)警告

android - 如何在android中实现未被绕过的SSL pinning

java - 将大量数据从 servlet 传输到 android 应用程序

c# - 更改布局大小取决于屏幕大小

android - 用相机拍照然后裁剪

Android:谷歌登录切换到其他 Activity 而不会丢失登录数据

android - 无法在 Android 中设置视频录制的最短持续时间