despertador - Android: ¿Cómo repetir un servicio con AlarmManager cada 15 minutos, pero solo funciona de 8:00 AM a 18:00 PM?
crear un despertador en android (2)
Si el servicio está hablando con la nube con solicitudes HTTP get / post / any, tenga en cuenta que una solución SyncAdapter proporcionará una mejor duración de la batería y que una solución SyncAdapter podría proporcionar algunos beneficios. (Recomiendo ver los videos de Google I / O en ambos temas).
El siguiente código hace algo parecido a lo que originalmente pediste.
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);
}
}
Necesito verificar la actualización de datos periódicamente, pero los datos solo se actualizan durante el día, así que quiero que esta acción repetitiva se ejecute solo en esa sección de tiempo para ahorrar batería y ancho de banda.
¿Qué tengo que hacer?
Siga estos sencillos pasos para mantener el servicio vivo para siempre en un dispositivo Android. 1. Llame a un servicio utilizando el administrador de alarmas cada 15 minutos. 2. devuelve START_STICKY en el método onStart. 3. En on destroy, llame al administrador de alarmas y reinicie el servicio utilizando el método startService. 4. (Opcional) Repita el punto número 3 en el método onTaskRemoved.