Notificaciones diarias a ciertas horas
Me gustaría lograr esto:
Después de encender la aplicación, el usuario recibe las notificaciones, todos los días a las 2 pm, si determinada condición es verdadera. Si la condición es falsa, no estamos mostrando una notificación este día. La condición se comprueba a las 2 pm, descarga algunos datos de Internet.
- Cambio de Android SIM
- AlarmManager no se repite
- ¿Cómo reiniciar un servicio muerto automáticamente?
- La localización de la ubicación de Android en Service no funciona hasta que reactive WiFi / mobile network
- Vincular servicio a la actividad en Android
Hasta ahora he utilizado AlarmManager y su método setRepeating () con intervalo de 24h. AlarmManager activa un servicio . En este servicio estoy descargando los datos, verificando la condición y si es verdad – mostrando la notificación . Dado que la descarga puede durar más de 5 segundos, he declarado android:process=":background"
para este servicio, para ejecutarlo en un proceso separado y no bloquear mi interfaz de usuario.
Este enfoque tiene dos inconvenientes:
1: Si el usuario abre la aplicación digamos que a las 4 pm (y la condición es cierta), recibirá la notificación inmediatamente . De la documentación setRepeating ():
Si el tiempo se produce en el pasado, la alarma se disparará inmediatamente, con un recuento de alarmas dependiendo de hasta qué punto en el pasado el tiempo de activación es relativo al intervalo de repetición.
Quisiera que el usuario no reciba una notificación este día, solamente el día siguiente y así sucesivamente.
2: Me preocupa que mis notificaciones no se muestren después de que el usuario apague el teléfono. De la documentación de AlarmManager :
Las alarmas registradas se mantienen mientras el dispositivo está dormido (y puede activar el dispositivo opcionalmente si se apagan durante ese tiempo), pero se borrará si se apaga y se reinicia.
No sé si es posible hacer que funcione todo el tiempo.
Si tienes alguna idea de cómo hacerlo mejor, eres bienvenido.
- No se puede comprobar si AlarmManager ha configurado la alarma
- Servicio de Android: ¿vincular o iniciar?
- Android - el servicio se detiene cuando se destruye la actividad
- AlarmManager que repite la alarma que falta al azar cuando el teléfono no está en uso
- Startservice no funciona en Android
- Paho MqttAndroidClient.connect siempre falla
- Android: Obtener una instancia de un servicio en ejecución
- ¿Qué significa la pérdida de una conexión de servicio?
1: No estoy muy seguro si he entendido su pregunta, pero creo que todo lo que tienes que hacer es si ya es pasado 2 pm agregar un día a las 2 pm:
GregorianCalendar twopm = new GregorianCalendar(); twopm.set(GregorianCalendar.HOUR_OF_DAY, 14); twopm.set(GregorianCalendar.MINUTE, 0); twopm.set(GregorianCalendar.SECOND, 0); twopm.set(GregorianCalendar.MILLISECOND, 0); if(twopm.before(new GregorianCalendar())){ twopm.add(GregorianCalendar.DAY_OF_MONTH, 1); } alarmManager.setRepeating(type, twopm.getTimeInMillis(), 1000*60*60*24, intent);
2: Usted podría registrar un BroadcastReceiver para el booting y comenzar su alarma otra vez allí. Echa un vistazo a esto: Android BroadcastReceiver en el inicio – seguir funcionando cuando la actividad está en segundo plano
- Acerca de arm-eabi-gcc y cross-compiling
- ¿Cómo instalar el paquete / herramienta Android Studio 2.2 CMake?