【问题标题】:GcmNetworkManager scheduling issuesGcmNetworkManager 调度问题
【发布时间】:2016-04-27 08:46:07
【问题描述】:

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

【问题讨论】:

  • 您找到问题的原因了吗?

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


【解决方案1】:

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

【讨论】:

    【解决方案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】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        我做的时候已经修好了:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-17
          • 2021-11-08
          相关资源
          最近更新 更多