@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
BatteryManager.BATTERY_STATUS_UNKNOWN);
if (status == BatteryManager.BATTERY_STATUS_CHARGING
|| status == BatteryManager.BATTERY_STATUS_FULL)
Toast.makeText(context, "Charging!", Toast.LENGTH_SHORT).show();
else
Toast.makeText(context, "Not Charging!", Toast.LENGTH_SHORT).show();
}
Manifest:
<receiver android:name=".receiver.BatteryReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
<action android:name="android.intent.action.BATTERY_CHANGED" />
</intent-filter>
</receiver>
In this code, the Toast always shows "Not Charging!". I tested this on an actual device, and when I plug it into AC or USB power, it still displays the "Not Charging!" Toast.
You cannot register for ACTION_BATTERY_CHANGED
via the manifest, so you are not receiving those broadcasts. You are trying to get BatteryManager
extras from Intents
that do not have those extras (e.g., ACTION_POWER_CONNECTED
). As a result, you are getting the default value of BATTERY_STATUS_UNKNOWN
.
Try the following:
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
'status' will now be a value between 1 and 5:
1 = Unknown
2 = Charging
3 = Discharging
4 = Not Charging
5 = Full
Your code:
if (status == BatteryManager.BATTERY_STATUS_CHARGING
|| status == BatteryManager.BATTERY_STATUS_FULL) ...
can be written:
if (status == 2 || status == 5) ...
Both are identical because BatteryManager.BATTERY_STATUS_CHARGING is a constant that always equals 2, and BatteryManager.BATTERY_STATUS_FULL is a constant that always equals 5.
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