How to broadcast intent with extras through ADB shell?

Valyo picture Valyo · Jul 18, 2013 · Viewed 16k times · Source

I am trying to send the BATTERY_CHANGED intent through the ADB shell. So far I only managed to send the intent with no information:

am broadcast -a android.intent.action.BATTERY_CHANGED

I created an app witch listens for this intent and here is what the system sends every few seconds:

#Intent;action=android.intent.action.BATTERY_CHANGED;launchFlags=0x60000010;i.icon-small=17302838;B.present=true;i.scale=100;i.level=100;S.technology=Li-ion;i.status=5;i.voltage=4155;i.invalid_charger=0;i.plugged=2;i.health=2;i.temperature=280;end

When I broadcast the intent my app shows this:

#Intent;action=android.intent.action.BATTERY_CHANGED;launchFlags=0x10;end

My question is how can I broadcast the intent through the adb shell with some of these properties/flags (like scale, status, plugged, etc.)?

Answer

Alex P. picture Alex P. · Jul 18, 2013

The <INTENT> parameter format is the same for all am subcommands like start, startservice and broadcast.

It could be passed as a combination of separate parameters like -a <ACTION>, -c <CATEGORY>, -n <COMPONENT> and different -e <EXTRA> for different types of extras or as a single URI formatted string:

am broadcast "intent:#Intent;action=android.intent.action.BATTERY_CHANGED;i.status=5;i.voltage=4155;i.level=100;end"

Also make sure to properly escape the command when running outside of the interactive adb shell session:

adb shell "am broadcast 'intent:#Intent;action=android.intent.action.BATTERY_CHANGED;i.status=5;i.voltage=4155;i.level=100;end'"