I am attempting to read the state of the Android battery when my repeating alarm broadcaster is called I have the following setup:
public class RepeatingAlarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
// Acquire the make of the device
final String PhoneModel = android.os.Build.MODEL;
final String AndroidVersion = android.os.Build.VERSION.RELEASE;
// Grab the battery information
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
final float batteryPct = level / (float)scale;
}
}
But I don't understand why it is returning that batteryPct = 1. Is there something I am missing here? I added the correct permissions based on the android Google page, but that doesn't seem to have helped.
You are getting -1 for both level and scale.
That is because you might be trying to broadcast ACTION_BATTERY_CHANGED in the manifest.
ACTION_BATTERY_CHANGED is a sticky intent and you cannot register a receiver to it in the manifest. Try the following
Intent i = new ContextWrapper(applicationContext).registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
// now you can get the level and scale from this intent variable
int level = i.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = i.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float battPct = level/(float)scale;
You would not neet to device a receiver for this intent, just use the above mentioned way, whereever you want to use it.
You might be getting -1 for both level and scale variable (the default value you specified), so try to print their values to make sure that the intent has those values set properly.
You should listen to ACTION_BATTERY_CHANGED to get battery level in Android
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With