Problemas de programación de GcmNetworkManager
Estoy utilizando GcmNetworkManager en mi aplicación periódica y una de ejecución de tareas de tarea. Estoy recibiendo estos 2 errores e incapaz de averiguar la razón. La implementación es correcta ya que no puedo reproducir estos problemas en la puesta en escena.
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)
Cualquier ayuda será apreciada.
Gracias
PS: Dispositivos tiene play-service 8.1+.
Tenía el mismo problema, lo arregló (después de una larga búsqueda y prueba y error) en mi archivo de manifiesto moviendo el elemento <service>
xml dentro del elemento <application>
. Tal vez esto ayude.
Así que el manifiesto se veía así cuando tuve el error:
<service> .... </service> <application> .... </application>
Y fue arreglado cuando lo hice:
<application> .... <service> .... </service> </application>
1.) ¿Ha declarado su servicio en su archivo de manifiesto como este:
<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>
Asegúrese de haber incluido el permiso BIND_NETWORK_TASK_SERVICE
2) Asegúrese de que su servicio está extendiendo GcmTaskService y está implementando onRunTask .
Consulte: https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmTaskService
Me encontré con el mismo problema. He encontrado una solución, pero no estoy seguro de la razón por qué. En su AndroidManifest.xml
no se olvide de establecer enabled = true
Sé que esto es un poco raro, pero como he dicho, comenzó a trabajar y ahora, la tarea periódica también se está ejecutando con éxito.
<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>
Aquí, PeriodicTaskService
obviamente, extiende GcmTaskService
.
Si falla en las pruebas Robolectric, eso es porque GcmNetworkManager.getInstance(applicationContext).schedule(task)
fallará en Robolectric.