我正在尝试使用ADB在我的Android应用程序上模拟GCM推送通知:
adb shell am broadcast -c com.MYAPPNAME -a com.google.android.c2dm.intent.RECEIVE -e data "SomeData"
据我所知,我得到了积极的结果:
Broadcasting: Intent { act=com.google.android.c2dm.intent.RECEIVE cat=[com.MYAPPNAME] (has extras) }
Broadcast completed: result=-1
很遗憾,我的应用程序在GCMListener上没有收到通知。
相关清单:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission
android:name="com.sears.devicelab.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.sears.devicelab.permission.C2D_MESSAGE" />
.... some more xml ....
<receiver
android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true" >
<!-- android:permission="com.google.android.c2dm.permission.SEND" > -->
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.MYAPP" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
</intent-filter>
</receiver>
<service
android:name=".common.gcm.AppGcmListenerService"
android:exported="false" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
<service
android:name=".common.gcm.GcmInstanceIDListenerService"
android:exported="false" >
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID" />
</intent-filter>
</service>
<service
android:name=".common.gcm.GcmRegistrationIntentService"
android:exported="false" >
</service>
GCM 监听器:
public class AppGcmListenerService extends GcmListenerService {
private static final String TAG = AppGcmListenerService.class.toString();
public AppGcmListenerService() {
}
@Override
public void onMessageReceived(String from, Bundle data) {
Log.i(TAG, "Push notification has been received: " + data);
}
}