Подтвердить что ты не робот

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

4b9b3361

Ответ 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.