Проблемы планирования 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.

Другие вопросы по тегам