Как запланировать запуск GcmTaskService каждый день в определенное время?
По сути, это периодическая задача GcmNetworkManager, которая должна выполняться каждый день в определенное время, она постоянна, поэтому она сохраняется после перезагрузок, ее период составляет 86400000L (24 часа), но мне нужно, чтобы она запускалась впервые в определенное время.
Я уже создал класс TaskService, добавил его в манифест и создал задачу, есть ли способ сделать это?
Это мой класс TaskService:
public class AgendaTaskService extends GcmTaskService {
private static final String TAG = "AgendaTaskService";
public static final String TAG_TASK_UPDATE_EVENTS = "AgendaTaskService";
@Override
public int onRunTask(TaskParams taskParams) {
Log.i(TAG,"Running task");
switch (taskParams.getTag()){
case TAG_TASK_UPDATE_EVENTS:
Log.i(TAG,"Updating agenda events");
//TODO HERE IS WHERE MY TASK WILL RUN
return GcmNetworkManager.RESULT_SUCCESS;
default: return GcmNetworkManager.RESULT_FAILURE;
}
}
}
И вот как я создаю задачу:
GcmNetworkManager gcmNetworkManager = GcmNetworkManager.getInstance(this);
PeriodicTask task = new PeriodicTask.Builder()
.setService(AgendaTaskService.class)
.setTag(AgendaTaskService.TAG_TASK_UPDATE_EVENTS)
.setPersisted(true)
.setPeriod(30L)
.setUpdateCurrent(true)
.build();
gcmNetworkManager.schedule(task);
2 ответа
Решение
Использование AlarmManager
запланировать PendingIntent
чтобы начать Service
во время запуска и выполняйте все необходимое для GCM планирование при запуске этой службы.
Вы можете запланировать OneOffTask для запуска вашей PeriodicTask