3

를 시작할 수 없습니다 나는이 예외 얻고 여기서GcmBroadcastReceiver IllegalStateException이이 : 나는 안드로이드에 FCM 푸시 알림을하고 있어요 서비스 의도를

GcmBroadcastReceiver IllegalStateException이 : 서비스의 의도를 시작할 수 없음을

이 포럼에서 많은 질문을 검색했지만 문제 해결을 위해 도움을받지 못했습니다. My Log and 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> 

오류 로그 : 당신은 26+의 targetSdkVersion으로, 안드로이드 8.0 이상에서 실행중인

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

. You cannot reliably call startService() from the background과 같이, GCM 수신기로부터와 같이.

  • 스위치 startForegroundService()하고 전경 서비스를 사용하거나

  • 스위치 특정 경우

JobIntentService에, 코드는 startService() 나타납니다를 호출하는 대신, 당신도해야 파스에서 왔어. Android 8.0을 고려한 Parse 클라이언트에 대한 업데이트가 있는지 확인해야합니다.

+0

targetSdkVersion을 25로 변경하면이 문제가 해결됩니까? 호출 메소드를 변경할 수 없으므로 요청하지만 SDK 대상을 변경할 수 있습니다. – clee2005

+0

@ clee2005 : "targetSdkVersion을 25로 변경하면이 문제가 해결됩니까?" - AFAIK, 네. – CommonsWare

+0

나는이 문제가있다 : startService()는 Parse로부터 호출된다. 파스 (Parse) 라이브러리의 최신 버전이이 문제를 해결하면 누구에게 알리는가? – matdev