studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android widget android-appwidget

para - manual de programacion android pdf



Android Widget no está actualizando (3)

Estoy tratando de implementar un widget simple para mostrar en la pantalla de inicio. El problema que estoy experimentando es que onUpdate solo se llama una vez cuando instalo el widget. La configuración está abajo. Nota: No dejaré el período de actualización en 20 segundos, ya que sé que mataría la batería (solo está probando).

Configuración:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="20000" android:initialLayout="@layout/my_custom_app_widget">` </appwidget-provider>`

Extracto manifiesto:

<receiver android:name="MyCustomWidgetProvider"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/my_custom_app_widget_info" /> </receiver>

Estoy observando el siguiente comportamiento cuando instalo el widget: En mi clase WidgetProvider, onReceive se llama, entonces onEnabled, luego onReceive, y luego onUpdate.

Después de eso, el widget aparece y onUpdate nunca se vuelve a llamar. También inspecciono la configuración del provder cuando se llama a onUpdate y todo lo establecido en el XML anterior (por ejemplo, el período de actualización) es correcto.


Mientras tiene android:updatePeriodMillis establecido en 20 segundos, el tiempo real mínimo es de 30 minutos. Entonces, si no ha estado esperando 30 minutos para ver si hay una actualización durante su prueba, necesitará esperar un poco más.


como duduli dijo ... use un alarmManager para enviar un intento a su clase de Widget, lo recibirá en su método onReceive, si no sabe cómo hacerlo, siga esta guía . Funcionó para mí y para otros


Del SDK:

Nota: Si el dispositivo está dormido cuando es hora de una actualización (según lo definido por updatePeriodMillis ), el dispositivo se despertará para realizar la actualización. Si no actualiza más de una vez por hora, esto probablemente no ocasione problemas significativos para la duración de la batería.

Sin embargo, si necesita actualizar con más frecuencia y / o no necesita actualizar mientras el dispositivo está dormido, entonces puede realizar actualizaciones basadas en una alarma que no activará el dispositivo.

Para hacerlo, configure una alarma con un Intento que recibe su AppWidgetProvider , usando el AlarmManager . Establezca el tipo de alarma en ELAPSED_REALTIME o RTC , que solo emitirá la alarma cuando el dispositivo esté en funcionamiento. Luego configure updatePeriodMillis en zero ("0").

Y cuando SDK 1.6+:

Nota: las actualizaciones solicitadas con updatePeriodMillis no se entregarán más de una vez cada 30 minutos.