13

Sto utilizzando GcmNetworkManager nella mia applicazione per l'esecuzione periodica e l'esecuzione di un'attività task. Sto ottenendo questi 2 errori e non riesco a capire il motivo. L'implementazione è corretta in quanto non riesco a riprodurre questi problemi durante la staging.Problemi di pianificazione 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) 

Qualsiasi aiuto sarà apprezzato.

Grazie

P.S: dispositivi è play-service 8.1+.

+0

Hai trovato che cosa ha causato il problema? – yshahak

risposta

2

1.) Avete dichiarato il vostro servizio nel file manifest in questo modo:

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

Assicurati di aver incluso il permesso BIND_NETWORK_TASK_SERVICE

2) Assicurarsi che il servizio si sta estendendo e GcmTaskService sta implementando onRunTask.

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

1

mi sono imbattuto lo stesso problema. Ho trovato una soluzione, ma non sono sicuro del motivo per cui. Nel tuo AndroidManifest.xml non dimenticare di impostare enabled = true Lo so un po 'strano, ma come ho detto, ha iniziato a funzionare e ora anche il task periodico viene eseguito correttamente.

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

qui, PeriodicTaskService ovviamente, si estende GcmTaskService.

4

Aveva lo stesso problema, risolto (dopo una lunga ricerca e tentativi ed errori) nel mio file manifest spostando l'elemento <service> xml all'interno dell'elemento <application>. Forse questo aiuta.

Così il manifesto guardato come questo, quando ho avuto l'errore:

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

ed è stato risolto quando ho fatto:

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

Se si sta venendo a mancare nei test Robolectric, è perché GcmNetworkManager.getInstance(applicationContext).schedule(task) non riuscirà in Robolectric.