Android Widget: muestra la actividad de configuración antes de que el widget se agregue a la pantalla.
Tengo un Widget de Android que utiliza servicios web para recuperar y mostrar los datos en el widget. El widget tiene una actividad de configuración que extends PreferenceActivity
. La actividad de configuración se inicia tan pronto como se instala el widget, que es el comportamiento deseado para este widget.
El problema es que cuando se agrega un widget a la pantalla de inicio, el widget intenta actualizarse antes de que se inicie o termine la actividad de configuración, lo que puede conducir potencialmente a un largo retraso (varios segundos). La actividad de configuración debe ocurrir antes de que el widget intente actualizarse cada vez que se añade un nuevo widget.
- ¿Cómo crear un directorio compartido con acceso de lectura y escritura a todas las aplicaciones en Android?
- Android registerOnSharedPreferenceChangeListener () causa bloqueo en una vista personalizada
- Transición de elementos compartidos de Android entre fragmentos con vista de reciclaje y detalles
- SharedPreferences y seguridad de subprocesos
- Intentos de Android: Inicia la actividad usando el nombre de clase de otra aplicación que tiene el mismo sharedUserId
Esta es la secuencia de eventos que veo en LogCat cuando se agrega un widget:
- Widget.onRecive: action = APPWIDGET_ENABLED
- Widget.onEnabled
- Widget.onReceive: action = APPWIDGET_UPDATE
- Widget.onUpdate: Se ha iniciado el servicio Widget.
- WidgetService.onStartCommand: Trabajo de ejecución potencialmente largo que retrasará la actividad de configuración de ser mostrado inmediatamente.
- WidgetConfiguration.onCreate
- Widget.onReceive: action = APPWIDGET_UPDATE
- Widget.onUpdate: El servicio de widgets se inicia de nuevo
- WidgetService.onStartCommand: El trabajo de ejecución potencialmente largo se vuelve a realizar.
Lo que sucede es que cuando se agrega un widget, el servicio se iniciará antes de que se muestre la vista de configuración.
Manifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xxx.xxx.xxxwidget" android:versionCode="1" android:versionName="@string/app_version" > <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:debuggable="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <receiver android:name="xxxWidget" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_info" /> </receiver> <activity android:name="xxxWidgetConfigure" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="xxxWidgetService" /> </application> </manifest>
Pregunta
¿Hay alguna manera de forzar la actividad de configuración para que se muestre antes de que el sistema intente agregar el widget a la pantalla de inicio?
- ¿Puede la biblioteca compartida llamar a otra biblioteca compartida?
- Sugerir para trabajar junto con un proyecto compartido
- Android: Cómo almacenar una matriz de cadenas en SharedPreferences para android
- Escribir un archivo de acceso privado en el directorio de archivos de otra aplicación
- Anulación del diseño utilizado para una preferencia en una preferenciaActividad / preferencia Pantalla utilizando temas
- Android - Transición de elementos compartidos en el cuadro de diálogo
De la documentación de Android: http://developer.android.com/guide/topics/appwidgets/index.html#Configuring
El método onUpdate () no se llamará cuando se cree 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, onUpdate () se llamará para actualizaciones posteriores, sólo se omite la primera vez.
SIN EMBARGO, esto no parece ser correcto!
Lo que hice fue añadir un booleano a SharedPreferences que me dice si este widgetId ha pasado por la configuración. Si no omite esta actualización. Implementar esto en el método onUpdate de su clase AppWidgetProvider.
Declare ActivityConfig en el manifiesto:
<activity android:name="com.zoostudio.moneylover.widget.ActivityWidgetConfig" android:label="Hello Widget Config"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> </intent-filter> </activity>
Con la clase de widget de actualización:
public abstract class SampleWiget extends AppWidgetProvider {
}
Siga el soporte para desarrolladores de Android para comprenderlo.