Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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.

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.

  • Ejecutar el oyente GPS en segundo plano en Android
  • El servicio de Android se detiene al salir de la aplicación
  • El servicio de Android se detiene cuando se cierra la aplicación
  • Cómo tener varias instancias de Servicio en Android
  • ¿Debo usar PendingIntent.getService () o getBroadcast con AlarmManager?
  • Android: El servicio se detiene cuando la actividad está cerrada
  • Llamar al método getIntent en servicio
  • Cómo iniciar la aplicación Android de sólo servicio
  • One Solution collect form web for “Notificaciones diarias a ciertas horas”

    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

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.