Je travaille sur la notification Push FCM dans Android, où je reçois cette exception:
GcmBroadcastReceiver IllegalStateException: non autorisé à démarrer le service
J'ai cherché beaucoup de questions dans ce forum, mais je n'ai toujours pas obtenu d'aide pour le résoudre. Mon patch Log and Manifest est également fourni ci-dessous.
Manifeste:
<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>
Journal des erreurs:
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)
Vous exécutez sur Android 8.0+, avec un targetSdkVersion
de 26+. Vous ne pouvez pas appeler de manière fiable startService()
depuis l'arrière-plan , par exemple à partir d'un récepteur GCM. Au lieu de cela, vous devez:
Basculez vers startForegroundService()
et utilisez un service de premier plan, ou
Passer à JobIntentService
Dans votre cas particulier, le code qui appelle startService()
semble provenir de Parse. Vous devriez voir s'il existe une mise à jour du client Parse qui prend en compte Android 8.0.