Mejor momento / ubicación para configurar un AlarmManager
Mi aplicación muestra contenido para un sitio que también tiene un sistema de notificación. Quiero mostrar si hay nuevas notificaciones, y estoy usando un AlarmManager
que llama a un IntentService
.
Mi pregunta es: ¿dónde debo comenzar / registrar este AlarmManager
? Lo he puesto en el onCreate()
de mi actividad sólo por la prueba de concepto (y su funcionamiento bien, muchas gracias :)), pero si usted comenzaría esa actividad dos veces, usted conseguiría alarmas múltiples.
- Android - ¿Utilizando el método de un servicio en una actividad?
- Servicio, WakeLock
- Iniciar un servicio en un proceso separado android
- Cómo asegurarse de que no inicia un servicio dos veces android
- El servicio de Android se detiene cuando se cierra la aplicación
La única solución posible que he venido con es esto, pero no sé si esto sería la mejor práctica
- Inicie el administrador en un
onCreate()
si la preferencia "alarma iniciada" es falsa - Establezca alguna variable que se inicie en las preferencias.
Ahora, si la alarma se detiene por alguna razón, no hay forma de reiniciarla. Por lo tanto, una variación sería:
- Siempre llamada cancelar en el
onCreate()
- Y luego siempre configurar la alarma.
Esto parece un patrón común: Desea obtener periódicamente información con una alarma, y no establecer esa alarma más de una vez. ¿Cómo debería hacer esto? ¿Cuándo, dónde y cómo registrar la alarma?
Además, continuando con el comentario de @Zelimir: ¿ puede comprobar si ya está configurada una alarma?
Idealmente, la alarma se establecerá independientemente de la actividad que se está iniciando o no, por supuesto, pero eso podría ser otra cosa.
Para completar, este es el código que estoy utilizando actualmente para iniciar la alarma:
AlarmManager alMan = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(this, CommentService.class); PendingIntent penInt = PendingIntent.getService(this, 0, i, 0); alMan.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, penInt);
Para una mayor completitud, la descripción / situación de la aplicación.
La aplicación es básicamente mostrar blogs (revistas si lo desea) de una determinada página. Tiene actividades para agregar entradas, ver entradas, agregar comentarios, etc. En el sitio 'madre' hay una opción para recibir notificaciones (como el número que ves aquí en SO también cuando recibes un mensaje). Quiero mostrar si hay nuevos mensajes, y así recuperarlos cada xx minutos. Se mostraría en la barra de notificación por ahora, pero podría alimentar algún tipo de widget más tarde.
Si necesita más información: la aplicación se llama Androblip y soporta un sitio llamado blipfoto.com
- ¿Cómo mantengo un Servicio vivo indefinidamente?
- ¿Debería un MediaPlayer ejecutarse en hilos separados?
- Llamada múltiple a startforeground?
- Cómo detener un IntentService?
- Descargar varios archivos utilizando un servicio en android
- Servicio de inicio de Android NFC
- El servidor http de Android no es accesible desde otros dispositivos de la red intermitentemente
- Android jobScheduler no se detendrá con jobFinished (params, false)
¿Cuándo, dónde y cómo registrar la alarma?
Eso es imposible responder en abstracto. Depende enteramente de cuáles son las reglas de negocio para su aplicación, que rechazó proporcionar en su pregunta.
Si el monitoreo está ocurriendo todo el tiempo, un patrón típico es registrar la alarma:
- En
onCreate()
de tu actividad principal para la primera ejecución de tu aplicación - En un
BroadcastReceiver
BOOT_COMPLETED
, para manejar los reinicios, que limpian la lista deAlarmManager
Puede usted comprobar si una cierta alarma es allready fijada?
No, pero puede cancelarlo sin problema. Simplemente cree un equivalente PendingIntent
y call cancel()
en el AlarmManager
.
- Cómo resaltar fechas de calendario cuáles fechas provienen de la base de datos
- Pasar un fd int nativo a FFMPEG desde un URI abierto