Android: ¿Cómo repetir un servicio con AlarmManager cada 15 minutos, pero sólo se ejecuta de 8:00 AM a 18:00 PM?
Tengo que comprobar la actualización de los datos periódicamente, pero los datos sólo se actualizan durante el día, así que quiero que esta acción repetitiva se ejecute sólo en esa sección de tiempo para ahorrar batería y ancho de banda.
¿Que debería hacer?
- ¿Por qué NullPointerException ocurre con el uso de BillingService estándar?
- Android - widget de actualización sobre el servicio con datos de la red. ¿El mejor enfoque?
- ¿Cómo saber cuántas aplicaciones se ejecutan en segundo plano en android?
- Diferencia entre los receptores de servicio y difusión en android
- Servicio de asignar un montón de memoria?
- El servicio de fondo de Android se está reiniciando cuando se cancela la aplicación
- Android: Unidad de prueba de un servicio
- Lanzar una excepción personalizada de un servicio a una actividad
- Servicio de Android - URL de ping
- BadParcelableException: ClaseNotFoundException al unmarshalling
- Crear notificación cada día
- Grabación de errores en vídeos android
- Servicio de Android: proceso vs. no
Si el servicio está hablando con la nube con solicitudes de HTTP get / post / whatever, entonces tenga en cuenta que una solución C2DM mejoraría la duración de la batería y que una solución SyncAdapter podría proporcionar algunos beneficios. (Recomiendo ver los videos de E / S de Google en ambos temas.)
El siguiente código hace algo cercano a lo que preguntaba originalmente.
public class MyUpdateService extends IntentService { public MyUpdateService() { super(MyUpdateService.class.getSimpleName()); } @Override protected void onHandleIntent(Intent intent) { // Do useful things. // After doing useful things... scheduleNextUpdate(); } private void scheduleNextUpdate() { Intent intent = new Intent(this, this.getClass()); PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // The update frequency should often be user configurable. This is not. long currentTimeMillis = System.currentTimeMillis(); long nextUpdateTimeMillis = currentTimeMillis + 15 * DateUtils.MINUTE_IN_MILLIS; Time nextUpdateTime = new Time(); nextUpdateTime.set(nextUpdateTimeMillis); if (nextUpdateTime.hour < 8 || nextUpdateTime.hour >= 18) { nextUpdateTime.hour = 8; nextUpdateTime.minute = 0; nextUpdateTime.second = 0; nextUpdateTimeMillis = nextUpdateTime.toMillis(false) + DateUtils.DAY_IN_MILLIS; } AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC, nextUpdateTimeMillis, pendingIntent); } }