You really cannot do what you are trying to do. There is no way to keep your application running forever, and you can only catch ACTION_BATTERY_* where your app is running.
Since the broadcast is sticky, though, you can do something else. Set an alarm (AlarmManager) so that you wake your app up, periodically. When you register a receiver, in your code, Android will deliver any intents that were broadcast while your app was not running.