我在我的应用程序中使用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 +。
答案 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中失败。