Projete seu widget para que os usuários possam configurar características específicas. Por exemplo, um widget de relógio pode permitir que os usuários configurem qual fuso horário mostrar.
Se você quiser permitir que os usuários configurem as definições do widget, crie uma configuração de widget
Activity. Essa atividade é iniciada automaticamente pelo
host do widget de app quando o widget é criado ou mais tarde, dependendo das
opções de configuração especificadas.
Declarar a atividade de configuração
Declare a atividade de configuração como uma atividade normal no arquivo de manifesto do Android. O host do widget de app a inicia com a ACTION_APPWIDGET_CONFIGURE
ação. Portanto, a atividade precisa aceitar esse intent. Exemplo:
<activity android:name=".ExampleAppWidgetConfigurationActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
Declare a atividade no arquivo AppWidgetProviderInfo.xml com o atributo android:configure. Saiba mais sobre como declarar esse
arquivo. Confira um exemplo de como declarar a atividade de configuração:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.example.android.ExampleAppWidgetConfigurationActivity"
... >
</appwidget-provider>
A atividade é declarada com um namespace totalmente qualificado, porque o inicializador a referencia de fora do escopo do pacote.
Isso é tudo o que você precisa para iniciar uma atividade de configuração. Em seguida, é necessário implementar a atividade real.
Implementar a atividade de configuração
Há dois pontos importantes a serem lembrados ao implementar a atividade:
- O host do widget de app chama a atividade de configuração, e ela sempre precisa retornar um resultado. O resultado precisa incluir o ID do widget de app
transmitido pelo intent que iniciou a atividade, salvo nos extras do intent
como
EXTRA_APPWIDGET_ID.- O sistema não envia a
ACTION_APPWIDGET_UPDATEtransmissão quando uma atividade de configuração é iniciada. Isso significa que ele não chama as atualizações do widget inicialmente quando o widget é criado. É responsabilidade da atividade de configuração solicitar uma atualização doGlanceAppWidgetao criar o widget pela primeira vez. No entanto, as atualizações são acionadas automaticamente para ciclos subsequentes.
- O sistema não envia a
Consulte os snippets de código na seção a seguir para ver um exemplo de como retornar um resultado da configuração e atualizar o widget Glance.
Atualizar o widget pela atividade de configuração
Quando um widget usa uma atividade de configuração, é responsabilidade da atividade atualizar o widget quando a configuração for concluída. Para fazer isso, acione uma atualização manual diretamente da instância GlanceAppWidget.
Veja um resumo do procedimento para atualizar adequadamente o widget e fechar a atividade de configuração:
Adquira o ID do widget pelo intent que iniciou a atividade:
val appWidgetId = intent?.extras?.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID ) ?: AppWidgetManager.INVALID_APPWIDGET_IDDefina o resultado da atividade como
RESULT_CANCELED.Dessa forma, se o usuário desistir da atividade antes de chegar ao fim, o sistema vai notificar o host do widget de app de que a configuração foi cancelada, e o host não vai adicionar o widget:
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_CANCELED, resultValue)Configure o widget de acordo com as preferências do usuário, por exemplo, gravando as seleções no Datastore persistente ou em um banco de dados local.
Quando a configuração for concluída, recupere o
GlanceIdcorrespondente ao ID do widget da plataforma:val glanceAppWidgetManager = GlanceAppWidgetManager(context) val glanceId = glanceAppWidgetManager.getGlanceIdBy(appWidgetId)Atualize o conteúdo do widget chamando a função de suspensão
updatena instânciaGlanceAppWidget:// Update the GlanceAppWidget directly ExampleGlanceWidget().update(context, glanceId)Crie o intent de retorno, defina-o com o resultado da atividade e conclua a atividade:
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_OK, resultValue) finish()
Opções de configuração de widget
Por padrão, o host do widget de app só inicia a atividade de configuração uma vez, imediatamente após o usuário adicionar o widget à tela inicial. No entanto, é possível especificar opções que permitem ao usuário reconfigurar widgets atuais ou pular a configuração inicial do widget fornecendo uma configuração padrão.
Permitir aos usuários reconfigurar widgets colocados
Para permitir que os usuários reconfigurem widgets atuais, especifique a reconfigurable
flag no widgetFeatures atributo de appwidget-provider. Exemplo:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable">
</appwidget-provider>
Os usuários podem reconfigurar o widget tocando e mantendo pressionado o widget e tocando no botão Reconfigurar, que está marcado como 1 na Figura 1.
Usar a configuração padrão do widget
É possível oferecer uma experiência de widget mais integrada, permitindo que os usuários pulem a etapa de configuração inicial. Para fazer isso, especifique as
configuration_optional e reconfigurable flags no widgetFeatures
campo. Isso fará com que a inicialização da atividade de configuração seja ignorada após o usuário adicionar o widget. Conforme mencionado anteriormente, o usuário ainda poderá reconfigurar o widget
depois. Por exemplo, um widget de relógio pode ignorar a configuração inicial e mostrar o fuso horário do dispositivo por padrão.
Confira um exemplo de como marcar sua atividade de configuração como reconfigurável e opcional:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable|configuration_optional">
</appwidget-provider>