13

私は定期的に、タスクのタスクの実行のいずれかの私のアプリケーションでGcmNetworkManagerを使用しています。私はこれらの2つのエラーを取得しており、その理由を理解することができません。私はステージングでこれらの問題を再現することができないので、実装は正しいです。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:Devicesにはplay-service 8.1+があります。

+0

あなたは、問題の原因を見つけましたか? – yshahak

答えて

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

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> 

、明らかにPeriodicTaskServiceGcmTaskServiceを拡張します。

4

<application>要素内に<service> xml要素を移動することで、マニフェストファイルで同じ問題が修正されました(長い検索と試行錯誤の後)。これはおそらく役立ちます。

だから、マニフェストは、私はエラーが発生したときに、このように見えた:

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

そして、私はそれを作ったとき、それが修正されました:

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

を、それがRobolectricテストに失敗した場合、つまり理由GcmNetworkManager.getInstance(applicationContext).schedule(task)はRobolectricで失敗します。

関連する問題