【问题标题】:Detect Changing Battery state at every percentage in android检测android中每个百分比的电池状态变化
【发布时间】:2012-04-28 16:10:20
【问题描述】:

我想检测每个百分比的电池变化。我可以用广播接收器检测一次电池电量。但当 % 从 66 变为 67 时,它不会自动更新值。

这是我的代码。

   private void batteryLevel() {
        BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                Log.i("Battery CHANGED******",":: IN RECEIVER");

                int rawlevel = intent.getIntExtra("level", -1);
                int scale = intent.getIntExtra("scale", -1);
                int level = -1;
                if (rawlevel >= 0 && scale > 0) {
                    level = (rawlevel * 100) / scale;
                }
                btnConsumer.setText("Battery Level Remaining: " + level + "%");
            }
        };
        IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryLevelReceiver, batteryLevelFilter);

    }

添加权限

 <uses-permission android:name="android.permission.BATTERY_STATS"></uses-permission>

它检测到 66,但当它更改 65 或 67 时,它不会更新值。或者不显示日志

我想让它像我可以得到每一个改变。

提前致谢。

【问题讨论】:

    标签: android power-management


    【解决方案1】:

    首先,您不需要BATTERY_STATS 权限。

    其次,onReceive() 的第一行会取消注册您的BroadcastReceiver,从而阻止您获得任何进一步的更新。

    第三,我们无法保证每 1% 的变化都会向您发送电池信息。例如,许多摩托罗拉手机仅每 10% 发送一次ACTION_BATTERY_CHANGED,直到电池电量变低。广播ACTION_BATTERY_CHANGED 的频率取决于设备制造商,而不是您。

    【讨论】:

    • 所以对于行车记录仪类型的应用程序(如果在设备上留下1% 百分比,则停止记录)最好从电池管理器手动获取此值,而不是使用ACTION_BATTERY_CHANGED 事件?
    • @user924:请注意,此时此问题和答案已有 9 年历史。那时,您所描述的(“从电池管理器手动获取此值”)并不存在。现在确实如此,我猜你是对的——偶尔轮询BatteryManager 以检查剩余费用有可能比这些广播更规律。
    【解决方案2】:

    您不需要 BATTERY_STATS 权限

    并且您不需要在 onReceive 方法中取消注册接收器,因为如果您这样做,您的接收器将只运行一次,而不是第二次。 所以只需注册接收者并在 onReceive 方法中做你想做的事情。

    如果您的手机处于充电状态,它将不断改变电池状态,并且会以百分之一的速度多次更新接收器

    【讨论】:

      猜你喜欢
      • 2016-11-21
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多