我正在开发一个使用推送通知(GCM)的应用程序,当应用程序运行时,此应用程序正在接收推送通知,但是当我强制停止来自设置 - > apps-> MyApp (单击它)并单击强制停止,然后它没有收到推送通知。 我已经用 WhatsApp 进行了测试,当我强制停止时,它正在接收推送通知。 那么如何在我的应用程序中实现相同的功能呢。
注意:在代码中,我在WakefulBroadcastReceiver的子类中接收PushNotifications,我已经在清单中静态注册了它,即使在应用程序强制停止时也没有调用它。
public class GCM_Receiver extends WakefulBroadcastReceiver {
//Processes Gcm message .
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "GCM_Receiver", Toast.LENGTH_LONG).show();
ComponentName comp = new ComponentName(context.getPackageName(),GCMIntentService.class.getName());
startWakefulService(context, (intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK);
}
}
修改: 我已经以这种方式静态注册了GCM_Receiver:
<receiver
android:name="com.myApp.GCM_Receiver"
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.RETRY" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.myApp" />
</intent-filter>
</receiver>
修改: 我的GCMIntentService代码如下:
public class GCMIntentService extends IntentService{
//Constructor with super().
public GCMIntentService () {
super("GcmIntentService");
}
//Processes gcm messages .
@Override
protected void onHandleIntent(Intent intent) {
Log.d("GCMIntentService ", "GCMIntentService Started");
Toast.makeText(getApplicationContext(), "GCMIntentService Started", Toast.LENGTH_LONG).show();
GCM_Receiver.completeWakefulIntent(intent);
}}
答案 0 :(得分:1)
只有Google Play服务可以通过<tables>
权限调用该特定广播接收器。由于我假设Play服务在发送广播时不包含FLAG_INCLUDE_STOPPED_PACKAGES标志,因此强制停止的应用程序将不会收到消息。
有趣的是,强制停止应用后,我没有收到任何WhatsApp消息。无论应用程序如何,如果它可以在强制停止时接收消息,那么它肯定会从具有FLAG_INCLUDE_STOPPED_PACKAGES标志的意图接收广播。