O Glance simplifica o gerenciamento da interação do usuário com as classes Action
. Resumo
As classes Action
definem as ações que um usuário pode realizar, e você pode especificar
operação realizada em resposta à ação. É possível aplicar uma Action
a qualquer
com o método GlanceModifier.clickable
.
Os widgets de apps ficam em um processo remoto. Portanto, as ações são definidas na criação
e a execução ocorre no processo remoto. No RemoteViews
nativo,
isso é feito usando PendingIntents
.
As ações a seguir são descritas nesta página:
.Iniciar uma atividade
Para iniciar uma atividade após a interação do usuário, forneça a
função actionStartActivity
para um Button
ou outro elemento combinável usando o
Modificador GlanceModifier.clickable
(..).
Forneça um dos seguintes valores em actionStartActivity
:
- A classe de atividade de destino
- O
ComponentName
- Uma intent
O Glance traduz a ação em um PendingIntent
com o destino fornecido e
parâmetros. No exemplo abaixo, a NavigationActivity
é iniciada quando uma
o usuário clicar no botão:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
Iniciar um serviço
Semelhante ao lançamento de uma atividade, inicie um serviço na interação do usuário usando um
dos métodos actionStartService
.
Forneça um dos seguintes valores em actionStartService
:
- A classe de atividade de destino
- O
ComponentName
- Uma intent
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
Enviar um evento de transmissão
Envie um evento de transmissão na interação do usuário usando um dos
Métodos actionSendBroadcast
:
Forneça um dos seguintes valores em actionSendBroadcast
:
- Ação de string
- O
ComponentName
- Uma intent
- Classe
BroadcastReceiver
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
Realizar ações personalizadas
Em vez de iniciar um destino específico, o Resumo pode usar uma ação lambda ou uma
actionRunCallback
para executar uma ação, como atualizar a IU ou o estado.
interação do usuário.
Executar ações lambda
É possível usar as funções lambda como callbacks para as interações da interface.
Por exemplo, transmita a função lambda à GlanceModifier.clickable
.
modificador:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
Ou transmita-o para o parâmetro onClick
em elementos combináveis compatíveis:
Button( text = "Submit", onClick = { submitData() } )
Executar ActionCallback
Como alternativa, use os métodos actionRunCallback
para realizar uma ação em
interação do usuário. Para isso, forneça uma implementação personalizada do
ActionCallback
:
@Composable private fun MyContent() { // .. Image( provider = ImageProvider(R.drawable.ic_hourglass_animated), modifier = GlanceModifier.clickable( onClick = actionRunCallback<RefreshAction>() ), contentDescription = "Refresh" ) } class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // TODO implement } }
Quando o usuário clicar, o método suspend onAction
do
ActionCallback
é chamado, executando a lógica definida (ou seja, solicitando
e atualizar os dados).
Para atualizar o widget após a execução da ação, crie uma nova instância e
chame update
(..). Para mais detalhes, consulte Gerenciar o estado do GlanceAppWidget
nesta seção.
class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // do some work but offset long-term tasks (e.g a Worker) MyAppWidget().update(context, glanceId) } }
Fornecer parâmetros para ações
Para fornecer mais informações a uma ação, use ActionParameters
.
para criar um par de chave-valor com tipo. Por exemplo, para definir
destino:
private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) class MyAppWidget : GlanceAppWidget() { // .. @Composable private fun MyContent() { // .. Button( text = "Home", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "home") ) ) Button( text = "Work", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "work") ) ) } override suspend fun provideGlance(context: Context, id: GlanceId) { provideContent { MyContent() } } }
Abaixo, os parâmetros estão incluídos na intent usada para iniciar o permitindo que a atividade de destino a recupere.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
Os parâmetros também são fornecidos ao ActionCallback
. Use o
Parameters.Key
para recuperar o valor:
class RefreshAction : ActionCallback { private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { val destination: String = parameters[destinationKey] ?: return // ... } }