Uso de AlarmManager para actualizar widgets manualmente
Como se indica en la Guía del desarrollador de Android, si desea que un widget se actualice con más frecuencia, debe utilizar AlarmManager
para establecer alarmas que no AlarmManager
el dispositivo.
En principio: no utilice los mecanismos estándar proporcionados por la clase AppWidgetProvider
y su configuración fácil con android: updatePeriodMillis en el archivo xml.
- Widget del visor de PDF en Android
- Android: Cómo crear un widget de botón personalizado
- Android RemoteViews, ¿cómo configurar ScaleType de un ImageView dentro de un widget?
- Listivew Widget no se actualiza automáticamente
- Android: no se puede abrir el contenido: file: /// storage / emulated / 0
Lo siento pedirlo, pero la guía solo dice "use AlarmManager, use RTC
o ELAPSED_REALTIME
, …" pero ¡CÓMO EXACTAMENTE envío una intención de actualizar mi widget que falta!
¿Podría alguien por favor indicar el código que necesito para formar el PendingIntent
que imita el comportamiento predeterminado? No tengo ni idea de cómo obtener el widget de ids, qué acción debo utilizar y así sucesivamente … Triste el dev guía deja de explicar en ese momento! ¿Qué se necesita como extras a qué acción?
En caso de que alguien esté interesado por qué quiero actualizar con más frecuencia de 30 minutos: mi widget muestra cuando el próximo autobús sale en una estación. Hay un autobús cada 20 minutos, así que tengo dos opciones: actualizar el widget cada minuto, mostrando la hora de salida del próximo autobús (eso es lo que quiero!) O, no tan bueno, el estado de salida del próximo autobús Así que tendré que actualizar por lo menos cada 20 minutos!
Ahora: cuando el dispositivo está dormido, por supuesto, esto nunca debe despertarlo – así que mi comprensión de esta sección en la guía dev es que ésta es la manera correcta de implementarla; ¿Alguien piensa que estoy equivocado? Oh, otra cosa que me gustaría saber: si el dispositivo está dormido cuando el widget debe ser actualizado y mi alarma no se emite debido al dispositivo de dormir, se actualizará inmediatamente cuando se despierta ???
¡¡Gracias por tu ayuda!!
PS: Realmente me pregunto por qué la definición xml de un proveedor de widgets no permite simplemente declarar "no despertar el dispositivo" por un interruptor booleano … que haría la vida mucho más fácil en primer lugar! ¿Qué tipo de un widget necesita para despertar el dispositivo de todos modos ??? D
Esto es lo lejos que llegué hasta ahora, pero no funciona – no pasa nada:
private void startAlarm(Context pContext) { Log.d(TAG, "startAlarm"); AlarmManager am = (AlarmManager) pContext.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent("android.appwidget.action.APPWIDGET_UPDATE"); intent.setClass(pContext, getClass()); PendingIntent pi = PendingIntent.getBroadcast(pContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); am.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, pi); }
- Widget de Android no se actualizará
- Copia de seguridad y restaurar widgets pantalla de inicio y fondo de pantalla en vivo
- Restaurar Administrador de alarmas después de reiniciar el teléfono
- Problema de AppWidgetProvider
- ¿Cómo crear un widget de Android con opciones?
- ¿Cómo almacenar datos para un widget?
- Android: pasar AppWidgetId a un servicio
- Android: cómo evitar que varias instancias de una actividad se inicien desde un widget?
¿Podría alguien por favor indicar el código que necesito para formar el PendingIntent que imita el comportamiento predeterminado?
Yo no, porque AFAIK no es posible "imitar el comportamiento por defecto" con precisión. Simplemente AlarmManager
alarma de AlarmManager
utilice un PendingIntent
que envíe una acción personalizada a su AppWidgetProvider
que procese en onReceive()
, o llamadas startService()
en el IntentService
que está utilizando para las inteligencias reales detrás del widget de la aplicación.
No tengo ni idea de cómo obtener los ID de widget
Guardó las ID de widget de las onUpdate()
reales onUpdate()
, como cuando el widget de la aplicación se pone por primera vez en la pantalla. Cuando su alarma se apague, actualice todos los widgets de su aplicación.
Actualizar el widget cada minuto, mostrando la hora de salida del próximo autobús (eso es lo que quiero!)
Por favor permita que este sea configurable por el usuario.
Oh, otra cosa que me gustaría saber: si el dispositivo está dormido cuando el widget debe ser actualizado y mi alarma no se emite debido al dispositivo de dormir, se actualizará inmediatamente cuando se despierta ???
AFAIK, sí, pero no he usado alarmas que no sean de la variedad _WAKEUP
.
No sé si todavía pueden ayudarte, pero escribí algunos mensajes sobre Android Widget hace unos días.
Aquí está el que se refiere a AlarmManager:
http://malubu.wordpress.com/2012/06/05/take-your-time-widgets-and-alarmmanager/
- ¿Cómo obtener InputStream de un https, Push Servlet fragmentado?
- ¿Es posible precargar múltiples secuencias con Exoplayer y reproducir varios videos simultáneamente?