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?
- Determinar cuándo un ViewPager cambia páginas
- ViewPager vacío se bloquea con PagerTabStrip
- Cómo capturar los cambios de tamaño de widget en dispositivos donde onAppWidgetOptionsChanged no se llama?
- Android EditText maxLength permite al usuario escribir más
- RemoteView y setGravity
- Cómo recuperar texto de Textbox en el widget de Android?
- Cómo cambiar el color del divisor predeterminado para todos los ListViews
- Manejo Hecho y siguiente de SoftKeypad en android?
- Cómo obtener contenido html desde una webview?
- Android Cómo ajustar el diseño en el modo de pantalla completa cuando el teclado virtual está visible
- El widget no aparece en la lista de widgets
- Android onEnabled / onDisabled nunca llamado
- Android: pasar el objeto del widget de recopilación a la actividad
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
- Cuando el widget esté activado, en el servicio de widget, configure la siguiente alarma después de 5 segundos.
- La alarma debe enviar una PendingIntent, que activaría su servicio después de 5 segundos.
- En el servicio onStartCommand de su servicio, active el servicio de actualización de widget.
- 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.
- Android superior Copiar / Pegar barra de herramientas
- ¿Cómo obtener el número total de vistas desde ViewFlipper?