私はバックグラウンドでデータを送信するために使用GcmTaskService
しています。ほとんどの場合、うまく機能しますが、最近、データがデバイスから送信されていないというクライアントから 1 件の苦情を受けました。デバイスを持ってきましたが、GcmTaskService の onRunTask がこの特定のデバイスで呼び出されていないことに気付きました。
これは私がサービスを開始する方法です:
GcmNetworkManager gcmNetworkManager = GcmNetworkManager.getInstance(FarmWorkApplication.context);
Class<FarmWorkSyncOutService> gcmTaskService = FarmWorkSyncOutService.class;
String name = gcmTaskService.getName();
gcmNetworkManager.cancelTask(name, gcmTaskService);
OneoffTask task = new OneoffTask.Builder()
.setService(gcmTaskService)
.setTag(name)
.setExecutionWindow(0L, maxDelay)
.setRequiredNetwork(Task.NETWORK_STATE_CONNECTED)
.build();
gcmNetworkManager.schedule(task);
これはマニフェストのサービス定義です:
<service android:name=".FarmWorkSyncOutService"
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>
デバイスはWIFIでインターネットに接続されており、インターネットを非常にうまくサーフィンしています。
この行:
gcmNetworkManager.cancelTask(name, gcmTaskService);
サービスが一度実行されることを保証するためだけに、私もそれを削除しようとしましたが、役に立ちませんでした
GooglePlayServices を強制停止してそのデータを削除しようとしましたが、これをデバッグするために他に何ができるでしょうか? なぜこれが起こる可能性があるのか わかりましたか?