Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从正在运行的应用程序列表关闭应用程序后未调用Android BroadcastReceiver_Android_Broadcastreceiver_Android Service_Google Cloud Messaging_Android Notifications - Fatal编程技术网

从正在运行的应用程序列表关闭应用程序后未调用Android BroadcastReceiver

从正在运行的应用程序列表关闭应用程序后未调用Android BroadcastReceiver,android,broadcastreceiver,android-service,google-cloud-messaging,android-notifications,Android,Broadcastreceiver,Android Service,Google Cloud Messaging,Android Notifications,在尝试在android应用程序中实现通知时,我发现如果用户从正在运行的应用程序列表中关闭应用程序,通知将不再起作用(顶部向下滑动,然后水平滑动-不强制退出,这将根据谷歌规范正确关闭所有未来调用)。使用后退按钮有时会导致相同的行为,但并不总是如此 根据我所研究的一切,我的理解是,只有用户的强制停止才能阻止广播接收器被调用 以下是Android清单中的相关代码和设置,请注意,当应用程序打开或通过home按钮离开时,所有这些都可以正常工作 安卓清单相关章节: <uses-permission a

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

根据我所研究的一切,我的理解是,只有用户的强制停止才能阻止广播接收器被调用

以下是Android清单中的相关代码和设置,请注意,当应用程序打开或通过home按钮离开时,所有这些都可以正常工作

安卓清单相关章节:

<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>

看起来你和我一样也遇到了同样的问题,我猜使用GCMReceiver和GCMListenerService对你也不起作用。
这个问题是有报道的。希望票证中的解决方法能对您有所帮助。

您应该尝试将其与服务一起使用。您是否调试了代码,并检查在关闭应用程序并收到推送通知时是否调用了通知的
onMessage()
方法。@Amrut-谢谢,是否可以详细说明?我已经调查过服务,但从我所看到的情况来看,我不确定这会有什么帮助。BroadcastReceiver正在调用一个服务(IntentService)来发布通知,您是否建议我将BroadcastReceiver本身包装在一个服务中?@Clairvoyant-是的,既没有调用BroadcastReceiver.OnReceive()也没有调用IntentService中的任何方法。实际上不确定您所指的是哪一个“onMessage()”方法。@透视-关于调试,当通过在运行的应用程序列表中滑动关闭应用程序时,调试器本身被分离,因此在这种情况下无法进行调试,尽管BroadcastReceive中的跟踪程序停止获取输出,因此很明显onReceive()没有人打电话。
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);
    }
}