My intention is to have saved in Preferences current status of Android device usb/power cable: connected/disconnected. From Developer site I see that there are two Intent for obtaining that status: ACTION_POWER_CONNECTED / DISCONNECTED. So I used same code as published at Developers:
http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
in section Monitor Changes in Charging State.
Manifest
<receiver android:name=".PowerConnectionReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
Java code
public class PowerConnectionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
Toast.makeText(context, "pvr = " + usbCharge + ", " + acCharge + "," + isCharging, Toast.LENGTH_SHORT).show();
}
}
When I am plugging USB cable IN/OUT than broadcast is always correctly sent and caught in PowerConnectionReceiver but always with same result (=cable is plugged out).
I tested it with Galaxy Nexus 4.1.1 / 4.2.1 - I am always getting 2xFALSE in Toast (chargePlug = FALSE, usbCharge = FALSE).
Why intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) always return default value "-1" ?
Thank you.
ps. everything works fine if I register receiver in Java
Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
...in Service or in Activity. But according to Android Developers site it is not prerequisity to make code above to return correct value;