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

相關問題