Diseña tu widget de modo que los usuarios puedan configurar rasgos específicos. Por ejemplo, un widget de reloj puede permitir que los usuarios configuren qué zona horaria mostrar.
Si quieres permitir que los usuarios configuren los parámetros de configuración de tu widget, crea una configuración de widget Activity. El host del widget de la app inicia automáticamente esta actividad cuando se crea el widget o más adelante, según las opciones de configuración que especifiques.
Declara la actividad de configuración
Declara la actividad de configuración como una actividad normal en el archivo de manifiesto de Android. El host de widgets de apps lo inicia con la acción ACTION_APPWIDGET_CONFIGURE, por lo que la actividad debe aceptar este intent. Por ejemplo:
<activity android:name=".ExampleAppWidgetConfigurationActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
Declara la actividad en el archivo AppWidgetProviderInfo.xml con el atributo android:configure. Obtén más información para declarar este archivo. A continuación, se muestra un ejemplo de cómo declarar la actividad de configuración:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.example.android.ExampleAppWidgetConfigurationActivity"
... >
</appwidget-provider>
La actividad se declara con un espacio de nombres completamente calificado, ya que el selector la referencia desde fuera del alcance de tu paquete.
Eso es todo lo que necesitas para iniciar una actividad de configuración. A continuación, debes implementar la actividad real.
Implementa la actividad de configuración
Hay dos puntos importantes que debes recordar cuando implementes la actividad:
- El host del widget de la app llama a la actividad de configuración, y esta siempre debe devolver un resultado. El resultado debe incluir el ID del widget de la app que pasó el intent que inició la actividad y que se guardó en los extras del intent como
EXTRA_APPWIDGET_ID.- El sistema no envía la emisión
ACTION_APPWIDGET_UPDATEcuando se inicia una actividad de configuración, lo que significa que no llama a las actualizaciones del widget inicialmente cuando se crea el widget. Es responsabilidad de la actividad de configuración solicitar una actualización delGlanceAppWidgetcuando se crea el widget por primera vez. Sin embargo, las actualizaciones se activan automáticamente para los ciclos posteriores.
- El sistema no envía la emisión
Consulta los fragmentos de código de la siguiente sección para ver un ejemplo de cómo devolver un resultado de la configuración y actualizar el widget de Glance.
Actualiza el widget desde la actividad de configuración
Cuando un widget usa una actividad de configuración, es responsabilidad de la actividad actualizar el widget cuando se completa la configuración. Para ello, activa una actualización manual directamente desde la instancia de GlanceAppWidget.
A continuación, se incluye un resumen del procedimiento para actualizar correctamente el widget y cerrar la actividad de configuración:
Obtén el ID del widget de la app del intent que inició la actividad:
val appWidgetId = intent?.extras?.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID ) ?: AppWidgetManager.INVALID_APPWIDGET_IDEstablece el resultado de la actividad en
RESULT_CANCELED.De esta manera, si el usuario vuelve a la actividad antes de llegar al final, el sistema notifica al host del widget de la app que se canceló la configuración y el host no agrega el widget:
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_CANCELED, resultValue)Configura el widget según las preferencias del usuario, por ejemplo, escribiendo las selecciones en un DataStore persistente o en una base de datos local.
Cuando se complete la configuración, recupera el
GlanceIdcorrespondiente al ID del widget de la plataforma:val glanceAppWidgetManager = GlanceAppWidgetManager(context) val glanceId = glanceAppWidgetManager.getGlanceIdBy(appWidgetId)Actualiza el contenido del widget llamando a la función de suspensión
updateen tu instanciaGlanceAppWidget:// Update the GlanceAppWidget directly ExampleGlanceWidget().update(context, glanceId)Crea el intent de retorno, configúralo con el resultado de la actividad y finaliza la actividad:
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_OK, resultValue) finish()
Opciones de configuración del widget
De forma predeterminada, el host del widget de la app solo inicia la actividad de configuración una vez, inmediatamente después de que el usuario agrega el widget a su pantalla principal. Sin embargo, puedes especificar opciones que permitan al usuario reconfigurar widgets existentes o omitir la configuración inicial del widget proporcionando una configuración predeterminada.
Cómo permitir que los usuarios reconfiguren los widgets colocados
Para permitir que los usuarios reconfiguren widgets existentes, especifica la marca reconfigurable en el atributo widgetFeatures de appwidget-provider. Por ejemplo:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable">
</appwidget-provider>
Los usuarios pueden reconfigurar el widget manteniendo presionado el widget y presionando el botón Reconfigurar, que se etiqueta como 1 en la figura 1.
Cómo usar la configuración predeterminada del widget
Puedes proporcionar una experiencia más fluida con el widget si permites que los usuarios omitan el paso de configuración inicial. Para ello, especifica las marcas configuration_optional y reconfigurable en el campo widgetFeatures. De esta manera, se omite el inicio de la actividad de configuración después de que un usuario agrega el widget. Como se mencionó anteriormente, el usuario todavía puede reconfigurar el widget más adelante. Por ejemplo, un widget de reloj puede evitar la configuración inicial y mostrar la zona horaria del dispositivo de forma predeterminada.
A continuación, se muestra un ejemplo de cómo marcar tu actividad de configuración como reconfigurable y opcional:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable|configuration_optional">
</appwidget-provider>