Android BroadcastReceiver在应用程序从“运行应用程序列表”关闭后未被调用

时间:2015-07-03 07:07:28

标签: android broadcastreceiver android-service google-cloud-messaging android-notifications

在尝试在Android应用程序中实现通知时,我发现如果用户从正在运行的应用程序列表中关闭应用程序,通知将不再有效(顶部向下滑动然后水平滑动 - 不强制退出正确关闭所有未来的调用按照谷歌规范)。使用后退按钮有时会导致相同的行为,但并非总是如此。

我对所研究的所有内容的理解是,只有用户强行停止才能停止调用广播接收器。

以下是Android Manifest的相关代码和设置,请注意,当应用程序打开或通过主页按钮离开时,一切正常。

Android Manifest相关章节:

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />

    <receiver
        android:name="mypackage.android.gcm.GCMBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND"
        android:exported="true">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="mypackage.android" />
        </intent-filter>
        <intent-filter>
            <action  android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="mypackage.android" />
        </intent-filter>
    </receiver>
    <service
        android:name="mypackage.gcm.GCMIntentService"
        android:stopWithTask="false"
        android:exported="false">
    </service>

这是我的课程覆盖WakefulBroadcastReceiver

public class GCMBroadcastReceiver extends WakefulBroadcastReceiver {

@Override
public void onReceive(final Context context, final Intent intent) {
    try {
        // Explicitly specify that GcmIntentService will handle the intent.
        ComponentName comp = new ComponentName(context.getPackageName(),  GCMIntentService.class.getName());
        // Start the service, keeping the device awake while it is launching.
        startWakefulService(context, (intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    } catch(Exception e) {
        //Log it, and move on
        Log.d("GCMBroadcastReceiver", "onReceive", e);
    }
}

1 个答案:

答案 0 :(得分:0)

看起来你偶然发现了issue我做过的事情,我想使用GCMReceiver和GCMListenerService也不适合你。 报告此问题是bug。希望机票中的变通方法可以帮到你。