Cómo actualizar un widget periódicamente, digamos cada 5 segundos

Tengo un widget con la implementación de botón simple, que cada vez que haga clic en un botón que se mueve a través de un conjunto determinado de imágenes. Ahora si quiero voltearlo cada 5 segundos sin hacer clic en el botón, ¿cómo puedo proceder?

En primer lugar, le recomiendo encarecidamente que no actualizar un widget cada 5 segundos. Mataría tu batería en muy poco tiempo.

Puede utilizar el atributo android: updatePeriodMillis en el appwidget-provider.
Echa un vistazo a la adición de Metadatos AppWidgetProviderInfo en el sitio web de desarrolladores de Android.
La cosa es, para conservar la batería, usted no puede fijar un período bajo 30 min (1800000ms).

Después de configurar el período de actualización que desea, sólo tiene que definir el comportamiento en el método onReceive () de su AppWidgetProvider. Para ello, debe capturar el evento ACTION_APPWIDGET_UPDATE .

@Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (ACTION_APPWIDGET_UPDATE.equals(action)) { // Update your widget here. } } 

Si realmente desea realizar una tarea cada 5 segundos, puede usar la clase Timer y TimerTask :

 final Handler handler = new Handler(); Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { handler.post(new Runnable() { public void run() { // send a broadcast to the widget. } }); } }; timer.scheduleAtFixedRate(task, 0, 5000); // Executes the task every 5 seconds. 

Utilice AlarmManager para desactivar las alarmas que enviarían una intención de actualización a su receptor.

Aquí hay un buen enlace que da un ejemplo.

http://www.parallelrealities.co.uk/2011/09/using-alarmmanager-for-updating-android.html

  1. Cuando el widget esté activado, en el servicio de widget, configure la siguiente alarma después de 5 segundos.
  2. La alarma debe enviar una PendingIntent, que activaría su servicio después de 5 segundos.
  3. En el servicio onStartCommand de su servicio, active el servicio de actualización de widget.
  4. Y vuelva a configurar la siguiente alarma después de 5 segundos.

Nota: Pero, 5 segundos, es realmente demasiado rápido. Se agotaría la batería lo suficientemente pronto, dependiendo de lo que más podría estar haciendo en el fondo. Piensa en hacer las actualizaciones con menos frecuencia.

 Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { runOnUiThread(new Runnable() { public void run() { imageView.setImageBitmap(bitmap); } }); } }, 5000, 5000); 

El primer cambio ocurrirá después de 5 segundos.

  • Ajuste dinámico del contenido y del diseño del widget al tamaño que el usuario haya definido mediante el cambio de tamaño. Androide
  • Controle el tiempo de ejecución de la visibilidad de Android TextView mediante programación
  • No se encontró ninguna actividad del lanzador. No se puede obtener widget para trabajar
  • Manejo de eventos de clic en un drawable dentro de un EditText
  • Alinear elementos del menú de opciones (en ActionBar)
  • Error "eglConfig no inicializado", pero no estoy usando openGl
  • Android Appcompat v21 - utilizar el estilo antiguo del hilandero
  • SetContentView (R.layout.Main); Main no se puede resolver o no es un campo
  • Android - Cuando se inicia la misma actividad desde el widget con diferentes extras, ¿cómo evitar que aparezca la misma instancia después de regresar del botón HOME?
  • Mapa de Android sin Internet (sin conexión)
  • Transmitir una matriz de enteros desde un AppWidget a un RemoteViewsService preexistente para ser renderizado por el RemoteViewsFactory
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.