Testing Your Android GCM Broadcast Receiver without GCM Messages
So depending on your environment it's kind of a pain-in-the-butt to test Google Cloud Messaging on an actual device.
Wouldn't it be nice if you could just test the code locally that would receive those magical GCM messages? *You can*.
adb shell is a magical place - a place where you can construct intents and fire them off into the system.
Step 1: Open your AndroidManifest.xml, locate your GCM Broadcast Receiver (let's say ours is net.npike.android.gcm.GCMBroadcastReceiver and our package name is net.npike.android)
<receiver
android:name="net.npike.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
<action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
<category android:name="net.npike.android"/>
</intent-filter>
</receiver>
Step 2: Temporarily remove the following attribute from its declaration:
android:permission="com.google.android.c2dm.permission.SEND"
Step 3: Open a terminal / command prompt where you can access ADB.
Step 4: Enter the shell.
adb shell
Step 5: Paste the following (replacing the appropriate values) and hit enter:
am broadcast -a com.google.android.c2dm.intent.RECEIVE --es "data.alert" "foo"
If you did everything correctly you should get some output like:
Broadcasting: Intent { act=com.google.android.c2dm.intent.RECEIVE cmp=net.npike.android/gcm.GCMBroadcastReceiver (has extras) }
Broadcast completed: result=-1
... and your GCM BroadcastReceiver should fire up and build a notification (or whatever you have your GCM BroadcastReceiver doing.)
Step 6: Finish your testing and undo Step #2.