GcmNetworkManager を使用して、API レベル 17 まで実行されるアプリで定期的なタスクをスケジュールしようとしています。GCM Network Manager ページ ( https://developers.google.com/クラウド メッセージング/ネットワーク マネージャー):
私の AndroidManifest.xml には、次のものがあります。
<service
android:name=".services.MyService"
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>
私のアプリケーションには、次のものがあります。
long periodSecs = 30L; // the task should be executed every 30 seconds
long flexSecs = 15L; // the task can run as early as -15 seconds from the scheduled time
String tag = "myScan|1";
PeriodicTask periodic = new PeriodicTask.Builder()
.setService(MyService.class)
.setPeriod(periodSecs)
.setFlex(flexSecs)
.setTag(tag)
.setPersisted(false)
.setRequiredNetwork(com.google.android.gms.gcm.Task.NETWORK_STATE_ANY)
.setRequiresCharging(false)
.setUpdateCurrent(true)
.build();
GcmNetworkManager.getInstance(this).schedule(periodic);
そして、次のような MyService があります。
public class MyService extends GcmTaskService {
@Override
public int onRunTask(TaskParams taskParams) {
Log.info("onRunTask: " + taskParams.getTag());
return GcmNetworkManager.RESULT_SUCCESS;
}
@Override
public int onStartCommand (Intent intent, int flags, int startId) {
Log.info("onStartCommand");
return GcmTaskService.START_STICKY_COMPATIBILITY;
}
}
アプリを起動すると、期待どおりにonStartCommandがログに記録されますが、onRunTaskは呼び出されません。何か不足していますか?私は、(開始コマンドの発火によって証明されるように) 開始されると、15 ~ 30 秒ごとに実行されることを期待しています - それは正しい仮定ですか? まったく発射されないのはなぜですか?
ありがとう!