I am having the exact same problem as this post: Battery broadcast receiver doesn't work. But it seems no one has answered that question.
Here is my BroadcastRec
From the documentation for ACTION_BATTERY_CHANGED:
You can not receive this through components declared in manifests, only by explicitly registering for it with Context.registerReceiver(). See ACTION_BATTERY_LOW, ACTION_BATTERY_OKAY, ACTION_POWER_CONNECTED, and ACTION_POWER_DISCONNECTED for distinct battery-related broadcasts that are sent and can be received through manifest receivers.
There you have it: you must explicitly register for it from your Java code.