Android 26无法启动接收器com.google.android.gcm.GCMBroadcastReceiver:java.lang.IllegalStateException:不允许启动服务Intent

时间:2017-12-11 10:30:48

标签: android eclipse google-cloud-messaging

您好

当我在Android Oreo中向我的游戏发送推送消息时收到错误消息 该游戏适用于所有以前版本的Android Oreo 它只发生在Android Oreo中 我在这个论坛上搜索了很多答案 有人说我必须使用FCM代替GCM 但我无法将旧的Eclipse项目更改为Android Studio 因为风险很大。
我使用gcm.jar库。
请帮助我&提前谢谢!

logcat的



        FATAL EXCEPTION: main
        java.lang.RuntimeException: Unable to start receiver com.google.android.gcm.GCMBroadcastReceiver: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x1000010 pkg=com.example.test cmp=com.example.test/.GCMIntentService (has extras) }: app is in background uid UidRecord{7cd2325 u0a379 RCVR idle change:uncached procs:1 seq(0,0,0)}
        at android.app.ActivityThread.handleReceiver(ActivityThread.java:3194)
        at android.app.ActivityThread.-wrap17(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1672)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)    
        Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x1000010 pkg=com.example.test cmp=com.example.test/.GCMIntentService (has extras) }: app is in background uid UidRecord{7cd2325 u0a379 RCVR idle change:uncached procs:1 seq(0,0,0)}
        at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1518)
        at android.app.ContextImpl.startService(ContextImpl.java:1474)
        at android.content.ContextWrapper.startService(ContextWrapper.java:649)
        at android.content.ContextWrapper.startService(ContextWrapper.java:649)
        at com.google.android.gcm.GCMBaseIntentService.runIntentInService(GCMBaseIntentService.java:282)
        at com.google.android.gcm.GCMBroadcastReceiver.onReceive(GCMBroadcastReceiver.java:55)
        at android.app.ActivityThread.handleReceiver(ActivityThread.java:3187)


2 个答案:

答案 0 :(得分:3)

从Android O开始。

  

如果针对Android 8.0的应用尝试在不允许创建后台服务的情况下使用该方法,则startService()方法现在会抛出IllegalStateException。

默认情况下,这些限制仅适用于以O为目标的应用,但如果用户为特定应用启用这些限制,那么应用将视为相同。  有关主题的更多信息,请参阅后台执行限制部分here

答案 1 :(得分:0)

从API 26开始,您将无法在后台启动或销毁服务。

https://developer.android.com/about/versions/oreo/background.html

有关详细信息,请阅读此处。

API 26在电池优化和安全方面存在很多限制。