GcmNetworkManager调度问题

时间:2016-04-27 08:46:08

标签: android scheduling job-scheduling periodic-task gcm-network-manager

我在我的应用程序中使用GcmNetworkManager进行定期和任务任务执行之一。我收到这两个错误,无法弄清楚原因。实施是正确的,因为我无法在登台时重现这些问题。

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 +。

4 个答案:

答案 0 :(得分:4)

有同样的问题,通过将<service> xml元素移动到<application>元素中,在我的清单文件中修复它(经过一些长时间的搜索和反复试验)。也许这有帮助。

所以当我遇到错误时,清单看起来像这样:

<service>
....
</service>
<application>
....
</application>

我做的时候就修好了:

<application>
....
  <service>
  ....
  </service>
</application>

答案 1 :(得分: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

答案 2 :(得分:2)

我遇到了同样的问题。我找到了解决办法,但我不确定原因。 在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

答案 3 :(得分:1)

如果在Robolectric测试中失败,那是因为GcmNetworkManager.getInstance(applicationContext).schedule(task)将在Robolectric中失败。