Проблемы планирования GcmNetworkManager
Я использую GcmNetworkManager в моем приложении для периодического и одного из задач. Я получаю эти 2 ошибки и не могу выяснить причину. Реализация правильная, так как я не могу воспроизвести эти проблемы при постановке.
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)
Любая помощь будет оценена.
Спасибо
PS: на девайсах есть play-сервис 8.1+.
4 ответа
Возникла такая же проблема, исправлена (после долгих поисков, проб и ошибок) в моем файле манифеста путем перемещения <service>
XML-элемент с точностью до <application>
элемент. Возможно, это помогает.
Итак, манифест выглядел так, когда у меня была ошибка:
<service>
....
</service>
<application>
....
</application>
И это было исправлено, когда я сделал это:
<application>
....
<service>
....
</service>
</application>
1.) Вы заявили о своей услуге в файле манифеста следующим образом:
<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>
Убедитесь, что вы включили разрешение BIND_NETWORK_TASK_SERVICE
2) Убедитесь, что ваш сервис расширяет GcmTaskService и реализует onRunTask.
См. https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmTaskService
Я столкнулся с той же проблемой. Я нашел исправление, но я не уверен в причине. В вашем AndroidManifest.xml
не забудьте установить enabled = true
Я знаю это немного странно, но, как я уже сказал, это начало работать, и теперь периодическое задание также выполняется успешно.
<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>
Вот, PeriodicTaskService
очевидно, расширяется GcmTaskService
,
Если это не удается в Robolectric тестах, это потому, что GcmNetworkManager.getInstance(applicationContext).schedule(task)
потерпит неудачу в Robolectric.