GCM 8.3 - 在ACTION_BOOT_COMPLETED上启动GcmListenerService导致崩溃

时间:2016-03-15 14:30:53

标签: android google-cloud-messaging google-play-services

我已经继承了一些在ACTION_BOOT_COMPLETED上调用GcmListenerService的代码:

    if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
        context.startService(new Intent(context, NotificationListenerService.class));
    }

此代码的目的是确保在设备启动时启动GCM侦听器。

导致GCM update 7.5 to 8.3.0 fatal exception中描述的崩溃:

FATAL EXCEPTION: AsyncTask #1
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference
E/AndroidRuntime:     at com.google.android.gms.gcm.GcmListenerService.zzo(Unknown Source)
E/AndroidRuntime:     at com.google.android.gms.gcm.GcmListenerService.zza(Unknown Source)
E/AndroidRuntime:     at com.google.android.gms.gcm.GcmListenerService$1.run(Unknown Source)
E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818)

在删除此代码后,按照接受的答案中的建议,一切正常,在我的测试设备上,当设备按预期启动时,我的GCM监听器就会启动。

问题在于,对于操作系统较低的设备(我的测试设备上有Marshmallow)或播放服务版本,可能存在问题。如果是这样,是否有任何可能的方法来检测,并在那些情况下启动服务?

1 个答案:

答案 0 :(得分:0)

经过大量的谷歌搜索和测试后,我决定删除这段代码。我没有看到任何负面影响。此代码的初衷是克服导致侦听器无法自动启动的GCM错误。但是对于版本8.3,这种方法是错误的,应该删除,因为它会导致某些设备崩溃。