¿Cómo ejecutar una función de Android cada 15 minutos, y específicamente en la marca de 15 minutos todos los días?
Esta quizás una pregunta repetida aquí pero todavía estoy haciendo frente a ediciones en esto, esperanza allí es una solución alrededor. Gracias por adelantado.
¿Cómo configuro el gestor de alarmas para que se ejecute de manera que ejecute la función específicamente cada 15 minutos, por ejemplo 8:00, 8:15, 8:30, 8:45, 9:00 todos los días, independientemente del momento en que Se inicia la aplicación.
- Cliente Socket.io android java que recibe mensajes y envía ejemplo de archivo
- ¿Cómo implementar la función .get con FutureTask o BackgroundTask usando android?
- Error "no tiene público TestCase (String nombre) o TestCase () en Junit prueba
- Manera de almacenar un diccionario grande con poca huella de memoria + búsquedas rápidas (en Android)
- FileInputStream a la matriz de bytes en la aplicación de Android
Tomemos un ejemplo si vamos a decir que empecé mi actividad principal de aplicación a las 7:47, y me gustaría que la alarma para comenzar a las 8:00, seguido, junto con 8:15, 8:30 y etc …. ¿cómo debo hacer ? Realmente agradecería si alguna sugerencia es dada ..
- Android rxJava Manejo de errores con retroadaptación
- Error de HttpsURLConnectionImpl.getInputStream () en la plataforma Android
- Quitar el prefijo de URL de String (http: /, www, etc.)
- No se puede comprobar permisos en fragmento con Sdk 23?
- Socket - Cliente Java, Servidor C #
- Android: guarda referencias a ApplicationContext
- Comportamiento extraño utilizando el operador ternario de Java en Android
- ¿Cómo escalar sprites en libgdx según las resoluciones de pantalla?
Debe configurar dos administradores de alarmas.para el primer tiempo de disparo ajustado calculando el tiempo restante a su hora apropiada (por ejemplo 8:00 Am). Y después de eso debe crear otro administrador de alarmas dentro de su primer administrador de alarmas que se activará cada 15 minutos.
Para calcular el tiempo para configurar el primer administrador de alarmas use el siguiente código:
Calendar c = Calendar.getInstance(); int m = calendar.get(Calendar.MINUTE); long start = System.currentTimeMillis(); int remain=0; if (m<15) { remain = 15-m; } else if (m<30) { remain = 30-m; } else if (m<45) { remain = 45-m; } else { remain = 60-m; } remain=start + remain*60*1000// convert it to milisecond and plus it to current time;
Editar
Y después de eso puede usar el código abajo para configurar el primer administrador de alarmas:
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, FirstReceiver.class); PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); am.set(AlarmManager.RTC_WAKEUP,remain, pi);
Por lo que ahora en su clase FirstReceiver hacer algo como bellow:
public class FirstReceiver extends BroadcastReceiver { //do what ever you want + code bellow to setup second alarm manager Intent intent = new Intent(this, SecAlarm.class); PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0); AlarmManager am= (AlarmManager)getSystemService(Context.ALARM_SERVICE); am.setRepeating(AlarmManager.ELAPSED_REALTIME,SystemClock.elapsedRealtime(), 15*60*60,pendingIntent); }
Es mejor establecer un despertador para cada vez que desee con un intervalo de un día
public void setAlarm(Context context) { AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(context, Alarm.class); PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); am.setRepeating(AlarmManager.RTC_WAKEUP, yourTimeInMilisecond, 24 * 60 * 60 * 1000, pi); // Millisec * Second * Minute }
Aquí yourTimeInMillisecond
es el tiempo que desea configurar la alarma, como si desea configurar la alarma para mañana 9 am, entonces será:
Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 9); calendar.set(Calendar.MINUTE, 0); calendar.add(Calendar.DAY_OF_YEAR, 1); long yourTimeInMilisecond = calendar.getTimeInMillis();
Espero que funcione para usted 🙂
PendingIntent pendingIntent = PendingIntent.getBroadcast( this.getApplicationContext(), 234324243, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (time limits), pendingIntent);