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.

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); } 

¿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/

  • Los botones del widget Android dejan de funcionar
  • Múltiples instancias de intención pendiente
  • Widget simple de Android que inicia la actividad
  • Widget del reproductor de música de Android
  • Cambiar imagen de RemoteView ImageView
  • Cómo quitar el relleno ImageButton de forma programática?
  • Cómo construir un Widget Android Simple
  • Animación en la barra de notificaciones Vista personalizada
  • Android Widget onReceive no puede llamar a la clase de servicio?
  • No se puede enviar la intención pendiente del widget, SendIntentException
  • Ancho más pequeño para Galaxy S y Galaxy S2
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.