13

Ich benutze GcmNetworkManager in meiner Anwendung für die periodische und eine der Task Taskausführung. Ich bekomme diese 2 Fehler und kann den Grund nicht herausfinden. Die Implementierung ist korrekt, da ich diese Probleme beim Staging nicht reproduzieren kann.GcmNetworkManager Scheduling-Probleme

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) 

Jede Hilfe wird geschätzt.

Dank

P. S: Geräte hat-Service spielen 8.1+.

+0

Haben Sie gefunden, was das Problem verursacht hat? – yshahak

Antwort

2

1.) Haben Sie Ihren Dienst in Ihrer Manifest-Datei wie folgt erklärt:

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

Achten Sie darauf, die Erlaubnis BIND_NETWORK_TASK_SERVICE aufgenommen haben

2) Stellen Sie sicher, dass Ihr Service GcmTaskService erweitert und Es implementiert onRunTask.

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

1

ich auf der gleichen Ausgabe lief. Ich habe eine Lösung gefunden, bin mir aber nicht sicher warum. In Ihrer AndroidManifest.xml vergessen Sie nicht zu setzen enabled = true Ich weiß das ein bisschen komisch, aber wie ich schon sagte, es begann zu arbeiten und jetzt, die periodische Aufgabe läuft auch erfolgreich.

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

hier, PeriodicTaskService offensichtlich, erstreckt GcmTaskService.

4

Hatte das gleiche Problem, behoben (nach einigen langen Suche und Versuch und Irrtum) in meiner Manifest-Datei durch Verschieben der <service> Xml-Element in das <application> Element. Vielleicht hilft das.

So sah das Manifest so, wenn ich den Fehler hatte:

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

Und es fixiert war, als ich es gemacht:

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

Wenn es in Robolectric Tests versagt, das ist, weil GcmNetworkManager.getInstance(applicationContext).schedule(task) wird in Robolectric fehlschlagen.