O Android 6.0 Marshmallow apresenta uma nova maneira para os usuários interagirem com aplicativos por meio do assistente como o Google Google Assistente. O assistente é uma janela de nível superior que os usuários podem visualizar para obter ações relevantes para a atividade atual. Essas ações podem incluir links diretos para outros apps no o dispositivo.
Os usuários ativam o Assistente tocando no botão home e mantendo-o pressionado ou dizendo um frase-chave. Em resposta, o sistema abre uma janela principal que exibe contexto ações relevantes.
Um app do Assistente, como o Google Assistente, implementa a janela sobreposta do Assistente usando uma chamado Now a um toque, que funciona com a funcionalidade da plataforma Android. O sistema permite que o usuário selecione um aplicativo assistente, que obtém informações contextuais de seu aplicativo usando a API Assist do Android.
Este guia explica como os apps Android usam a API Assist para melhorar o assistente experiência do usuário. Para aprender a criar um app de música para iniciar o Google Assistente e controle, consulte Google Assistente e apps de mídia.
Como usar o Assistente
A Figura 1 ilustra uma interação comum do usuário com o Assistente. Quando o usuário toca e o mantém pressionado o botão home, os callbacks da API Assist são invocados no app de origem (etapa 1). O Google Assistente renderiza a janela sobreposta (etapas 2 e 3), e, em seguida, seleciona a ação a ser executada. O Assistente executa a ação selecionada, como disparar uma intent com um link direto para o app de restaurante (destino) (etapa 4).
Os usuários podem configurar o Assistente selecionando Configurações > Aplicativos > Aplicativos padrão > Assistência e entrada de texto por voz. Os usuários podem alterar as opções do sistema, como acessar o conteúdo da tela como texto e acessando uma captura de tela, conforme mostrado na Figura 2.
App de origem
Para garantir que seu app funcione com o assistente como uma fonte de informações para o usuário, faça o seguinte: você só precisa seguir melhorias de acessibilidade práticas recomendadas de autenticação. Esta seção descreve como fornecer informações adicionais para ajudar a melhorar a experiência do usuário com o Assistente e também que precisam de tratamento especial, como visualizações personalizadas.
Compartilhar mais informações com o Assistente
Além de texto e captura de tela, seu app pode compartilhar outras informações com o assistente. Por exemplo, suas músicas pode optar por passar informações do álbum atual para que o assistente possa sugerir ações mais inteligentes, adaptadas à atividade atual. As APIs Assist não fornecem controles de mídia. Para adicionar controles de mídia, consulte Google Assistente e apps de mídia.
Para dar mais informações ao assistente, seu app oferece contexto de aplicativo global registrando um listener de app e fornece informações específicas da atividade com callbacks da atividade, conforme mostrado em Figura 3:
Para fornecer contexto de aplicativo global, o aplicativo cria uma implementação de
Application.OnProvideAssistDataListener
e o registra
usando registerOnProvideAssistDataListener()
.
Para fornecer informações contextuais específicas da atividade, a atividade
substitui onProvideAssistData()
e onProvideAssistContent()
.
Os dois métodos de atividade são chamados após o método global opcional
é invocado. Como os callbacks são executados na linha de execução principal, eles precisam
concluir imediatamente.
Os callbacks são invocados apenas quando a atividade está em execução.
Fornecer contexto
Quando o usuário ativa o Assistente,
onProvideAssistData()
é chamado para criar um
ACTION_ASSIST
com todo o contexto da
aplicativo atual representado como uma instância de AssistStructure
. Você pode substituir esse método para colocar
tudo o que quiser no pacote apareça na
EXTRA_ASSIST_CONTEXT
parte da intent de assistência.
Descrever conteúdo
Seu app pode implementar onProvideAssistContent()
para melhorar a experiência do usuário com o Assistente, fornecendo referências relacionadas ao conteúdo
relacionadas à atividade atual. Você pode descrever o conteúdo do app usando o
vocabulário comum definido pelo site Schema.org
usando um objeto JSON-LD. No exemplo abaixo, um app de música oferece
dados estruturados para descrever o álbum de música que o usuário está atualmente
visualização:
Kotlin
override fun onProvideAssistContent(assistContent: AssistContent) { super.onProvideAssistContent(assistContent) val structuredJson: String = JSONObject() .put("@type", "MusicRecording") .put("@id", "https://example.com/music/recording") .put("name", "Album Title") .toString() assistContent.structuredData = structuredJson }
Java
@Override public void onProvideAssistContent(AssistContent assistContent) { super.onProvideAssistContent(assistContent); String structuredJson = new JSONObject() .put("@type", "MusicRecording") .put("@id", "https://example.com/music/recording") .put("name", "Album Title") .toString(); assistContent.setStructuredData(structuredJson); }
Você também pode melhorar a experiência do usuário com implementações personalizadas de
onProvideAssistContent()
,
o que pode oferecer os seguintes benefícios:
- Ajusta o conteúdo fornecido intenção refletir melhor o contexto geral da atividade.
- Fornece o URI do conteúdo exibido.
- Preenche
setClipData()
com conteúdo de interesse que o usuário está visualizando no momento.
Observação : os apps que usam uma implementação de seleção de texto personalizada provavelmente vão precisar
para implementar onProvideAssistContent()
e chamar setClipData()
.
Implementação padrão
Se nem a onProvideAssistData()
nem a onProvideAssistContent()
é implementado, o sistema ainda prossegue e transmite a
informações coletadas automaticamente para o assistente, a menos que
é sinalizada como segura.
Como mostrado na Figura 3, o sistema usa as implementações padrão de onProvideStructure()
e onProvideVirtualStructure()
para
coletar textos e visualizar informações de hierarquia. Se a sua visualização implementar
desenho de texto, substitua onProvideStructure()
para fornecer
o assistente com o texto mostrado ao usuário chamando setText(CharSequence)
.
Na maioria dos casos, implementar o suporte à acessibilidade permite que para conseguir as informações necessárias. Para implementar o suporte à acessibilidade, observar as práticas recomendadas descritas em Como criar aplicativos Acessível, incluindo o seguinte:
- Fornecer os atributos
android:contentDescription
. - Preencher
AccessibilityNodeInfo
para visualizações personalizadas. - Marca
se os objetos
ViewGroup
personalizados estão corretos expor seus filhos.
Excluir visualizações de assistentes
Para gerenciar informações sensíveis, o app pode excluir a visualização atual do Assistente
definindo o parâmetro de layout FLAG_SECURE
da WindowManager
. Defina FLAG_SECURE
explicitamente para
cada janela criada pela atividade, incluindo caixas de diálogo. Seu app também pode usar
setSecure()
para excluir
uma superfície do Assistente. Não há
mecanismo global (nível do app) para excluir todas as visualizações do assistente. Observação
que FLAG_SECURE
não faça com que os callbacks da API Assist sejam interrompidos
disparando. A atividade que usa FLAG_SECURE
ainda pode explicitamente
fornecer informações a um app assistente usando os callbacks descritos anteriormente.
neste guia.
Observação: para contas corporativas (Android for Work),
o administrador pode desativar
a coleta de dados do Assistente para o perfil de trabalho usando o método setScreenCaptureDisabled()
da API DevicePolicyManager
.
Interações por voz
Os callbacks da API Assist também são invocados frase-chave detecção. Para mais informações, consulte a Voz Actions.
Considerações sobre a ordem Z
Um assistente usa uma janela sobreposta leve exibida na parte superior atividade atual. Como o usuário pode ativar o assistente a qualquer momento, não criar permanentes alerta do sistema que interferem na janela de sobreposição, como mostrado em Figura 4.
Se seu aplicativo usa alerta do sistema, remova-as imediatamente porque ao deixá-las prejudica a experiência do usuário.
App de destino
Os apps do Assistente costumam usar os links diretos para encontrar apps de destino. Para tornar seu um possível app de destino, considere adicionar suporte a links diretos. O modelo entre o contexto atual do usuário e os links diretos ou outras possíveis ações exibidas no (mostrada na etapa 3 na Figura 1) é específica para a implementação do Google Assistente. Para exemplo, o app Google Assistente usa links diretos e links de apps para: direcionar tráfego para aplicativos de destino.
Implementar o próprio assistente
Você pode implementar o próprio assistente. Conforme mostrado na Figura
2, o usuário pode selecionar o app assistente ativo. A
O app assistente precisa fornecer uma implementação de VoiceInteractionSessionService
e VoiceInteractionSession
, como mostrado em
este exemplo de VoiceInteraction
. Isso também requer a permissão BIND_VOICE_INTERACTION
. O assistente pode
recebem o texto e a hierarquia de visualização representada como uma instância de AssistStructure
em onHandleAssist()
.
Ele recebe a captura de tela por meio do onHandleScreenshot()
.