widgets tutorial tipos studio programacion móviles form diseñar desarrollo curso aplicaciones android android-widget broadcastreceiver android-manifest android-appwidget

tutorial - tipos de widgets en android



Widget onUpdate llamado cuando se inicia la actividad de configuración (1)

Proporcionar una respuesta después de excavar en el código fuente:

1) Este es el comportamiento esperado ver here

Este método también se llama cuando el usuario agrega el widget de aplicación

2) Parece que has encontrado tu propia respuesta. Para otros que buscan los documentos, vete here

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

3) Ya que el AppWidgetProvider extiende BroadcastReceiver pero no se declara definitivo, puede agregar la acción desde su segundo receptor

<receiver android:name="MyWidgetProvider" android:exported="true"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <action android:name="org.test.mywidget.FORCE_SMALL_WIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/my_widget_info" /> </receiver>

luego puede anular onReceive en su clase MyWidgetProvider y si la acción es su acción personalizada, manéjelo a super.onRecieve (contexto de contexto, intención de intento) de esta manera:

@Override public void onReceive(Context context, Intent intent) { if(intent.getAction() .equals("org.test.mywidget.FORCE_SMALL_WIDGET_UPDATE")){ // handle your action } else { super.onRecieve(context, intent); } }

Según la Guía:

AppWidgetProvider es solo una clase de conveniencia. Si desea recibir las transmisiones del Widget de la aplicación directamente, puede implementar su propio BroadcastReceiver o anular la devolución de llamada onReceive (Context, Intent).

Una cosa a tener en cuenta con esto, la actualización a la vista remota solo se activará en el updatePeriodMillis, independientemente de que agregue su propia acción a la Intención para que el proveedor la maneje.

Buena suerte y feliz codificación!

Estoy implementando un widget y estoy enfrentando los siguientes problemas:

1) onUpdate se llama cuando agrego el widget a la pantalla de inicio, incluso si especificé una Actividad de configuración. Tan pronto como lo agrego a la pantalla de inicio, se APPWIDGET_ENABLED transmisión de APPWIDGET_ENABLED , seguida de APPWIDGET_UPDATE y luego se inicia la actividad de configuración ... ¿Es esto un error? ¿Cómo debo entender en el método onUpdate que se invoca antes de que la actividad de configuración haya regresado? Puedo hacerlo a través de un valor de preferencia compartido, pero me gustaría que se comporte como está escrito en la guía del desarrollador, es decir, el método onUpdate no debe llamarse.

2) onUpdate no se llama cada updatePeriodMillis segundos, que se han establecido en 10000 , es decir, 10 segundos para propósitos de prueba. ¿Perdí algo en la declaración del receiver dentro del archivo Manifest? Sigo recibiendo la advertencia de Lint El receptor exportado no requiere permiso, pero creo que esto es un problema de Lint y no es mi culpa. EDITAR : Acabo de encontrar esto en los documentos de referencia: Nota: Las actualizaciones solicitadas con updatePeriodMillis no se entregarán más de una vez cada 30 minutos. Por lo tanto, es correcto que el widget no se actualice con la frecuencia que especifiqué y he cambiado el tiempo a 1800000 milisegundos.

3) Quiero enviar mi propia acción de difusión al proveedor del widget, ¿es correcto agregar otro bloque receiver en el Manifest dirigido a la misma clase de proveedor o debo agregar solo otra acción de intención dentro del intent-filter que contiene la acción APPWIDGET_UPDATE ? Por cierto, he comentado mi segundo bloque de receiver y no es la causa de los problemas anteriores. Creé otro bloque de receiver porque quería declararlo como no exportado, para permitir que la acción del intent-filter sea ​​activada solo por el código de mi aplicación y no por nadie más.

AndroidManifest.xml

<receiver android:name="MyWidgetProvider" android:exported="true"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/my_widget_info" /> </receiver> <receiver android:name="MyWidgetProvider" android:exported="false"> <intent-filter> <action android:name="org.test.mywidget.FORCE_SMALL_WIDGET_UPDATE" /> </intent-filter> </receiver>

my_widget_info.xml

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="110dp" android:updatePeriodMillis="1800000" android:initialLayout="@layout/my_widget_layout" android:configure="org.test.mywidget.MyWidgetConfiguration" android:resizeMode="none"> </appwidget-provider>