应用程序强制停止时接收推送通知。(Android)

时间:2015-05-20 14:47:11

标签: android google-cloud-messaging

我正在开发一个使用推送通知(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);
}}

1 个答案:

答案 0 :(得分:1)

只有Google Play服务可以通过<tables>权限调用该特定广播接收器。由于我假设Play服务在发送广播时不包含FLAG_INCLUDE_STOPPED_PACKAGES标志,因此强制停止的应用程序将不会收到消息。

有趣的是,强制停止应用后,我没有收到任何WhatsApp消息。无论应用程序如何,如果它可以在强制停止时接收消息,那么它肯定会从具有FLAG_INCLUDE_STOPPED_PACKAGES标志的意图接收广播。