Обнаружение изменения состояния батареи на каждый процент в Android

Я хочу, чтобы обнаружить смену батареи на каждый процент. Я могу определить уровень заряда батареи один раз с приемником вещания. Но его значение не обновляется автоматически при изменении% с 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, он не будет обновлять значение. или не отображать журнал тоже

Я хочу сделать так, как будто я могу получить каждое изменение.

Заранее спасибо.

2 ответа

Во-первых, вам не нужно BATTERY_STATS разрешение.

Во-вторых, самая первая строка вашего onReceive() отменяет регистрацию BroadcastReceiverтем самым не давая вам получать дальнейшие обновления.

В-третьих, нет никакой гарантии, что вам будет предоставлена ​​информация об аккумуляторе для каждого изменения в 1%. Многие телефоны Motorola, например, только отправляют ACTION_BATTERY_CHANGED каждые 10%, пока батарея не разрядится. Решение о том, как часто вещать ACTION_BATTERY_CHANGED зависит от производителя устройства, а не от вас.

Вам не нужно это разрешение BATTERY_STATS

и вам не нужно отменять регистрацию получателя в методе onReceive, потому что, если вы это сделаете, ваш приемник будет запускаться только один раз, а не во второй раз. Так что просто зарегистрируйте получателя и делайте то, что хотите, в методе onReceive.

если ваш телефон находится в состоянии зарядки, он будет постоянно менять состояние батареи и обновлять приемник много раз с точностью до одного процента.

Другие вопросы по тегам