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