7

我想检测每个百分比的电池变化。我可以用广播接收器检测一次电池电量。但是当 % 从 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 时,它不会更新值。或者不显示日志

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

提前致谢。

4

2 回答 2

16

首先,您不需要BATTERY_STATS许可。

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

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

于 2012-04-17T11:08:36.767 回答
0

你不需要那个BATTERY_STATS权限

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

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

于 2021-09-01T07:24:55.467 回答