2010-12-30 10 views
10

Así es como puedo configurar widget de mi de APP:widget con android: Configurar recibirá onUpdate incluso si la configuración es sin terminar

<appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="240dp" 
    android:minHeight="193dp" 
    android:updatePeriodMillis="86400000" 
    android:initialLayout="@layout/xyz_appwidget" 
    android:configure="com.xyz.activity.Configuration" 
    /> 

Por lo tanto, el sistema le mostrará la actividad Configuration, una vez que el widget se ha puesto en la pantalla de inicio por el usuario. Desafortunadamente, sin la configuración aplicada, este widget no se debe poner en la pantalla.

Agregué algunas salidas de depuración. Esto sucede cuando el usuario selecciona el widget para su pantalla de inicio. Nota: Esto es cuando la actividad de configuración está en frente, NO el widget.

I/ActivityManager( 101): Start proc com.xyz for broadcast com.xyz/.widget.xyz.XyzWidgetProvider: pid=14371 uid=10050 gids={3003, 1015} 
D/XyzWidgetProvider(14371): onReceive: android.appwidget.action.APPWIDGET_ENABLED 
D/XyzWidgetProvider(14371): onEnabled 
D/XyzWidgetProvider(14371): onReceive: android.appwidget.action.APPWIDGET_UPDATE 

Eso quiere decir que incluso el widget no está configurado, se dispararon los dos eventos (activado, UPDATE). Habilitado tiene sentido para mí, pero ACTUALIZACIÓN claramente no. Especialmente cuando la actividad Configuration finalizó correctamente, no se envía ningún evento adicional UPDATE.

También leo que estableciendo el resultado de la actividad Configuration en Activity.RESULT_CANCELED, se puede cancelar el proceso de configuración. Pero como esto claramente se ejecuta de forma asíncrona, no sé cómo hacer que el proceso de configuración bloquee? Alguien se encontró con esto antes?

Mi nota final: He echado un vistazo en el widget de la Galería de Android, que de alguna manera gestiona esto correctamente, por lo que no se agregará un widget de galería no configurado. Pero sospecho que algunos HTC magia allí como los registros no son muy útiles.

+0

que tienen el mismo problema, se ejecuta la configuración '' Activity' desencadena onUpdate' para el 'AppWidget ' –

+0

Probablemente voy a informar esto como un error en bugs.android.com .. –

+0

Agregado como informe de errores, pls. * star * si lo desea: http://code.google.com/p/android/issues/detail?id=13755#c0 –

Respuesta

8

Así es como maneja esto: En su actividad de configuración, haga esto en su onCreate(): setResult (Activity.RESULT_CANCELED);

Una vez que se realiza la actividad de configuración, p. todos los parámetros están establecidos y el widget debe mostrarse, haga setResult (Activity.RESULT_OK);

Por lo tanto, si el usuario no finaliza la actividad de configuración, se eliminará su widget.

Sin embargo, en el código del widget mismo (onUpdate), aún necesita verificar si la configuración está completa, porque APPWIDGET_UPDATE definitivamente se llamará antes de que se complete la configuración. Puede omitir todas las actualizaciones si la configuración no está allí, su widget no estará visible en este punto de todos modos, y una vez que se complete la configuración, el sistema eliminará su widget o su configuración estará allí.

Una cosa más. Debe iniciar la actualización de widgets desde la actividad de configuración al finalizar con éxito, porque el sistema no lo hará por sí mismo.

+0

¿Cómo verifica en OnUpdate si las configuraciones están completas? – Giorgi

+0

@Giorgi: configura algunas preferencias en la configuración. Cargas esa preferencia en la actualización. Si no puede cargar la configuración pref = no completada aún. – haimg

1

"Sin embargo, en el código del widget mismo (onUpdate), aún debe verificar si la configuración está completa, porque APPWIDGET_UPDATE definitivamente se llamará antes de completar la configuración."

Esta no es la forma en que debería ser. En el sitio del desarrollador de Android, puede leer lo siguiente ...

"No se llamará al método onUpdate() cuando se crea el widget de la aplicación (el sistema no enviará la transmisión ACTION_APPWIDGET_UPDATE cuando se inicia una actividad de configuración). Es responsabilidad de la actividad de configuración solicitar una actualización de AppWidgetManager cuando se crea por primera vez el Widget de la aplicación. Sin embargo, se llamará a onUpdate() para actualizaciones posteriores, solo se omite la primera vez ".

+0

Así que supongo que esto es un error. Veré lo que está sucediendo en los registros. Necesitará pasar más tiempo para probar, también las ideas de 'haimg'. –

Cuestiones relacionadas