Detect Changing Battery state at every percentage in android

android, power-management

Solution

First, you do not need the `BATTERY_STATS` permission.

Second, the very first line of your `onReceive()` unregisters your `BroadcastReceiver`, thereby preventing you from getting any further updates.

Third, there is no guarantee that you will have battery information delivered to you for each and every 1% change. Many Motorola phones, for example, only send `ACTION_BATTERY_CHANGED` every 10% until the battery gets low. The decision on how frequently to broadcast `ACTION_BATTERY_CHANGED` is up to the device manufacturer, not you.

Problem

i want to detect battery change at every percentage. I am able to detect battery level once with broadcast receiver. But its not updating value automatically when % change from 66 to 67. Here is my code. ``` 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); } ``` Added permission ``` <uses-permission android:name="android.permission.BATTERY_STATS"></uses-permission> ``` It detect 66 but when it change 65 or 67 it will not update value. or not display log too I want to make it like i can get every change. Thanks in advance.

Original source