Проблемы с расписанием 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)
Любая помощь будет оценена.
Спасибо
P.S: У устройств есть игровое обслуживание 8.1 +.
Ответы
Ответ 1
Имел ту же проблему, исправил ее (после некоторого длительного поиска и проб и ошибок) в моем файле манифеста, перемещая элемент <service>
xml в элемент <application>
. Возможно, это помогает.
Итак, манифест выглядел так, когда у меня была ошибка:
<service>
....
</service>
<application>
....
</application>
И это было исправлено, когда я это сделал:
<application>
....
<service>
....
</service>
</application>
Ответ 2
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
Ответ 3
Я столкнулся с той же проблемой. Я нашел исправление, но я не уверен в причине.
В 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
.
Ответ 4
Если он не работает в тестах Robolectric, это связано с тем, что GcmNetworkManager.getInstance(applicationContext).schedule(task)
не будет работать в Robolectric.