estoy poniendo en práctica un widget y estoy frente a los siguientes problemas:Widget onUpdate llama cuando se puso en marcha Configuración Actividad
1)onUpdate
se llama cuando añado el widget a la pantalla de inicio, incluso si especificó una actividad de configuración. Tan pronto como lo agregue a la pantalla de inicio, se envía la emisión APPWIDGET_ENABLED
, seguido del 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, no se debe llamar al método onUpdate
.
2)onUpdate
no se llama cada updatePeriodMillis
segundos, que han sido establecidos a 10000
, es decir 10
segundos para propósitos de prueba .. ¿Me he perdido algo en la declaración receiver
dentro del archivo de manifiesto? Sigo recibiendo la advertencia de Pelusa Receptor exportado no requiere permiso pero creo que esto es un problema de pelusa y no es mi culpa. EDIT: 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 he especificado y he cambiado el tiempo a 1800000
milisegundos.
3) Quiero ofrecer mi propia acción de difusión para el proveedor de widgets, ¿es correcto añadir otro bloque receiver
en el Manifiesto de la orientación de la misma clase de proveedor o debería agregar sólo otra acción intención dentro de la intent-filter
que contiene la acción APPWIDGET_UPDATE
? Por cierto, he comentado mi segundo bloque receiver
y no es la causa de los problemas anteriores. Creé otro bloque receiver
porque quería declararlo como no exportado, para permitir que la acción intent-filter
se active solo por mi código de aplicación y 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>
Para ** 1) ** Vea mi respuesta aquí: http://stackoverflow.com/a/12236443/380151 – Spiff
@Spiff así es como resolví el problema, usando una preferencia compartida booleana * isInitialized_ID * por -widget instancia. Gracias. –
¿Puede proporcionar más descripciones sobre su solución? Tal vez algún ejemplo de código? – DrHolera