3

我工作的FCM推送通知在Android中,在那里我得到这个异常:GcmBroadcastReceiver IllegalStateException异常:不允许启动服务意向

GcmBroadcastReceiver IllegalStateException异常:不允许启动服务意向

我在这个论坛上搜索了很多问题,但仍然没有得到解决它的帮助。我的日志和清单补丁也在下面给出。

清单:

<uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.VIBRATE" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

<receiver android:name="com.parse.GcmBroadcastReceiver" 
      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.REGISTRATION" /> 
       <category android:name="com.kolbeh" /> 
      </intent-filter> 
     </receiver> 
     <meta-data android:name="com.parse.push.gcm_sender_id" 
      android:value="id:85490######" /> 

     <service android:name="com.parse.PushService" /> 

     <receiver 
      android:name="dinewhere.fcm.CustomPushReceiver" 
      android:exported="false"> 
      <intent-filter> 
       <action android:name="com.parse.push.intent.RECEIVE" /> 
       <action android:name="com.parse.push.intent.OPEN" /> 
       <action android:name="com.parse.push.intent.DELETE" /> 
      </intent-filter> 
     </receiver> 

错误日志:

10-16 16:52:19.621 25906-25906/com.kolbeh E/AndroidRuntime: FATAL EXCEPTION: main 
                  Process: com.kolbeh, PID: 25906 
                  java.lang.RuntimeException: Unable to start receiver com.parse.GcmBroadcastReceiver: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x1000010 pkg=com.kolbeh cmp=com.kolbeh/com.parse.PushService (has extras) }: app is in background uid UidRecord{2ac0a5c u0a888 RCVR idle procs:1 seq(0,0,0)} 
                   at android.app.ActivityThread.handleReceiver(ActivityThread.java:3259) 
                   at android.app.ActivityThread.-wrap17(Unknown Source:0) 
                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677) 
                   at android.os.Handler.dispatchMessage(Handler.java:105) 
                   at android.os.Looper.loop(Looper.java:164) 
                   at android.app.ActivityThread.main(ActivityThread.java:6541) 
                   at java.lang.reflect.Method.invoke(Native Method) 
                   at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
                  Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x1000010 pkg=com.kolbeh cmp=com.kolbeh/com.parse.PushService (has extras) }: app is in background uid UidRecord{2ac0a5c u0a888 RCVR idle procs:1 seq(0,0,0)} 
                   at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1505) 
                   at android.app.ContextImpl.startService(ContextImpl.java:1461) 
                   at android.content.ContextWrapper.startService(ContextWrapper.java:644) 
                   at android.content.ContextWrapper.startService(ContextWrapper.java:644) 
                   at com.parse.ServiceUtils.runIntentInService(ServiceUtils.java:37) 
                   at com.parse.ServiceUtils.runWakefulIntentInService(ServiceUtils.java:68) 
                   at com.parse.GcmBroadcastReceiver.onReceive(GcmBroadcastReceiver.java:21) 
                   at android.app.ActivityThread.handleReceiver(ActivityThread.java:3252) 
                   at android.app.ActivityThread.-wrap17(Unknown Source:0)  
                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677)  
                   at android.os.Handler.dispatchMessage(Handler.java:105)  
                   at android.os.Looper.loop(Looper.java:164)  
                   at android.app.ActivityThread.main(ActivityThread.java:6541)  
                   at java.lang.reflect.Method.invoke(Native Method)  
                   at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)  
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)  
+1

@U汗:你解决了这个问题吗? – Debugger

回答

8

您在Android 8.0+上运行,用26+一targetSdkVersion。例如来自GCM接收机的数字信号。相反,你应该:

  • 切换到startForegroundService()和使用前景的服务,或

  • 切换到JobIntentService

你的具体情况,该代码正在调用startService()出现来自Parse。您应该看看是否有更新的Parse客户端需要考虑Android 8.0。

+0

将更改targetSdkVersion为25解决这个问题吗?我在问,因为我无法更改调用方法,但我可以更改SDK目标。 – clee2005

+0

@ clee2005:“是否将targetSdkVersion更改为25可解决此问题?” - AFAIK,是的。 – CommonsWare

+0

我有这个问题:从解析调用startService()。有谁知道最近版本的Parse lib是否修复了这个问题? – matdev

相关问题