13

我在我的应用程序中使用 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)

任何帮助将不胜感激。

谢谢

PS:设备有播放服务 8.1+。

4

4 回答 4

4

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

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

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

当我制作它时它被修复了:

<application>
....
  <service>
  ....
  </service>
</application>
于 2016-09-15T21:04:16.473 回答
3

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

于 2016-06-02T06:02:38.870 回答
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.

于 2016-08-07T10:28:58.600 回答
1

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

于 2017-03-16T17:39:40.903 回答