13

Używam GcmNetworkManager w mojej aplikacji do okresowego wykonywania jednego z zadań. Otrzymuję te 2 błędy i nie mogę ustalić przyczyny. Implementacja jest poprawna, ponieważ nie mogę odtworzyć tego problemu podczas przemieszczania.Problemy z harmonogramem GcmNetworkManager

Fatal Exception: java.lang.RuntimeException: Package manager has died 
    at android.app.ApplicationPackageManager.queryIntentServicesAsUser(ApplicationPackageManager.java:700) 
    at android.app.ApplicationPackageManager.queryIntentServices(ApplicationPackageManager.java:706) 
    at com.google.android.gms.gcm.GcmNetworkManager.zzdi(Unknown Source) 
    at com.google.android.gms.gcm.GcmNetworkManager.schedule(Unknown Source) 

&

Caused by java.lang.IllegalArgumentException: There is no GcmTaskService component registered within this package. Have you extended GcmTaskService correctly? 
    at com.google.android.gms.common.internal.zzx.zzb(Unknown Source) 
    at com.google.android.gms.gcm.GcmNetworkManager.zzdi(Unknown Source) 
    at com.google.android.gms.gcm.GcmNetworkManager.schedule(Unknown Source) 

Każda pomoc będzie mile widziane.

Dzięki

P.S: Urządzenia mają usługę rozrywkową 8.1+.

+0

Czy znalazłeś przyczynę problemu? – yshahak

Odpowiedz

2

1.) Czy zadeklarował swoje usługi w pliku manifestu tak:

<service android:name="MyTaskService" 
      android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE" 
      android:exported="true"> 
      <intent-filter> 
       <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY"/> 
      </intent-filter> 
</service> 

Upewnij się, że zawarte za zgodą BIND_NETWORK_TASK_SERVICE

2) Upewnij się, że usługa jest rozszerzenie GcmTaskService i implementuje on onRunTask.

Patrz: https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmTaskService

1

natknąłem tej samej kwestii. Znalazłem poprawkę, ale nie jestem pewien z jakiego powodu. W swoim AndroidManifest.xml nie zapomnij ustawić enabled = true Wiem, że to trochę dziwne, ale jak już mówiłem, zaczęło działać, a teraz okresowe zadanie również działa poprawnie.

<service 
     android:name=".periodic.PeriodicTaskService" 
     android:enabled="true" 
     android:exported="true" 
     android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY" /> 
     </intent-filter> 
    </service> 

tutaj, PeriodicTaskService oczywiście rozciąga GcmTaskService.

4

Miałem ten sam problem, naprawiłem (po długich poszukiwaniach i próbach i błędach) w moim pliku manifestu, przenosząc element xml <service> do elementu <application>. Być może to pomaga.

Tak manifest wyglądało to kiedy miałem błąd:

<service> 
.... 
</service> 
<application> 
.... 
</application> 

I została ustalona kiedy zrobiłem go:

<application> 
.... 
    <service> 
    .... 
    </service> 
</application> 
1

Jeśli zawodzi w testach Robolectric, to dlatego, GcmNetworkManager.getInstance(applicationContext).schedule(task) zakończy się niepowodzeniem w Robolectric.