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.
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.
来源:https://stackoverflow.com/questions/10189218/detect-changing-battery-state-at-every-percentage-in-android