3

Je travaille sur la FCM notification Push dans Android, où je reçois cette exception:GcmBroadcastReceiver IllegalStateException: Non autorisé à démarrer le service intention

GcmBroadcastReceiver IllegalStateException: Non autorisé à démarrer le service intention

J'ai cherché beaucoup de questions dans ce forum, mais je n'ai toujours pas obtenu d'aide pour le résoudre. Mon correctif Log et Manifest est également donné ci-dessous.

Manifest:

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

Error Log:

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 Khan: Avez-vous résolu le problème? – Debugger

Répondre

8

Vous exécutez sur Android 8.0+, avec un targetSdkVersion de 26+. You cannot reliably call startService() from the background, par exemple à partir d'un récepteur GCM. Au lieu de cela, vous devez soit:

  • Passer au startForegroundService() et utiliser un service de premier plan, ou

  • Passer au JobIntentService

Dans votre cas, le code qui appelle startService() apparaît être de Parse. Vous devriez voir s'il y a une mise à jour du client Parse qui prend en compte Android 8.0.

+0

Le fait de changer la targetSdkVersion en 25 va-t-il résoudre ce problème? Je demande comme je ne peux pas changer les méthodes d'appel, mais je peux changer la cible du SDK. – clee2005

+0

@ clee2005: "Est-ce que le fait de changer la targetSdkVersion en 25 réglerait ceci?" - AFAIK, oui. – CommonsWare

+0

J'ai ce problème: le startService() est appelé depuis Parse. Est-ce que quelqu'un sait si une version récente de la librairie Parse résout ce problème? – matdev