Android 6.0 Marshmallow introduce un nuovo modo per gli utenti di interagire con le app tramite l'assistente app come Google Assistente. L'assistente è una finestra di primo livello che gli utenti possono visualizzare per ottenere azioni pertinenti per l'attività corrente. Queste azioni potrebbero includere link diretti ad altre app su del dispositivo.
Gli utenti attivano l'assistente premendo a lungo il pulsante Home o dicendo keyphrase. In risposta, il sistema apre una finestra di primo livello che mostra azioni pertinenti.
Un'app dell'assistente, come l'Assistente Google, implementa la finestra overlay dell'assistente tramite una chiamata Now Ovunque, che funziona con le funzionalità a livello di piattaforma Android. Il sistema consente all'utente di selezionare un'app di assistente, che ottiene informazioni contestuali dalla tua app utilizzando API Assist di Android.
Questa guida spiega in che modo le app per Android utilizzano l'API Assist di Android per migliorare l'assistente un'esperienza utente positiva. Per scoprire come creare un'app multimediale in modo che l'assistente possa avviarsi e controllare, vedi Assistente Google e app multimediali.
Usare gli assistenti
La figura 1 illustra una tipica interazione dell'utente con l'assistente. Quando l'utente preme a lungo sul pulsante Home, i callback dell'API Assist vengono richiamati nell'app di origine (passaggio 1). L'assistente esegue il rendering della finestra di overlay (passaggi 2 e 3), e l'utente seleziona l'azione da eseguire. L'assistente esegue l'azione selezionata, ad esempio attivare un intent con un link diretto all'app del ristorante (destinazione) (passaggio 4).
![](https://developer.android.com/static/images/training/assistant/image01.png?authuser=8&hl=it)
Figura 1. Esempio di interazione con l'assistente con la funzionalità Now Ovunque di l'app Google
Gli utenti possono configurare l'assistente selezionando Impostazioni > App > App predefinite > Assist e input vocale. Gli utenti possono modificare le opzioni di sistema, ad esempio i contenuti della schermata sotto forma di testo e l'accesso a uno screenshot, come mostrato nella Figura 2.
![](https://developer.android.com/static/images/training/assistant/image02.png?authuser=8&hl=it)
Figura 2. Assist e impostazioni input vocale
App di origine
Per assicurarti che la tua app funzioni con l'assistente come fonte di informazioni per l'utente, devi solo seguire al meglio l'accessibilità pratiche. Questa sezione descrive come fornire informazioni aggiuntive per contribuire a migliorare l'esperienza utente con l'assistente, oltre agli scenari che richiedono una gestione speciale, come le viste personalizzate.
Condividi informazioni aggiuntive con l'assistente
Oltre al testo e allo screenshot, la tua app può condividere altre informazioni con l'assistente. Ad esempio, la tua musica l'app può scegliere di trasmettere le informazioni correnti dell'album affinché l'assistente possa suggerire azioni più intelligenti in base all'attività in corso. Tieni presente che le API Assist non forniscono controlli multimediali. Per aggiungere i controlli multimediali, vedi Assistente Google e app multimediali.
Per fornire ulteriori informazioni all'assistente, l'app fornisce contesto globale dell'applicazione registrando un listener di app e fornisce informazioni specifiche per le attività con callback delle attività, come illustrato in Figura 3:
![](https://developer.android.com/static/images/training/assistant/image03.png?authuser=8&hl=it)
Figura 3. Diagramma della sequenza del ciclo di vita dell'API Assist
Per fornire un contesto globale dell'applicazione, l'app crea un'implementazione
Application.OnProvideAssistDataListener
e la registra
utilizzando registerOnProvideAssistDataListener()
.
Per fornire informazioni contestuali specifiche per l'attività, l'attività
sostituisce onProvideAssistData()
e onProvideAssistContent()
.
I due metodi di attività vengono chiamati dopo l'impostazione
viene richiamato. Poiché i callback vengono eseguiti sul thread principale, dovrebbero
completa rapidamente.
I callback vengono richiamati solo quando l'attività è in esecuzione.
Fornire contesto
Quando l'utente attiva l'assistente,
onProvideAssistData()
viene chiamato per creare un
ACTION_ASSIST
Intento con tutto il contesto
applicazione attuale rappresentata come un'istanza di AssistStructure
. Puoi sostituire questo metodo per posizionare
qualsiasi elemento desiderato nel bundle venga visualizzato
EXTRA_ASSIST_CONTEXT
parte dell'intent indiretto.
Descrizione dei contenuti
La tua app può implementare onProvideAssistContent()
per migliorare l'esperienza utente con l'assistente, fornendo riferimenti relativi ai contenuti
in relazione all'attività corrente. Per descrivere i contenuti dell'app, puoi utilizzare
vocabolario comune definito da Schema.org
tramite un oggetto JSON-LD. Nell'esempio riportato di seguito, un'app di musica fornisce
dati strutturati per descrivere l'album musicale di cui l'utente è attualmente
visualizzazione:
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); }
Puoi anche migliorare l'esperienza utente con implementazioni personalizzate di
onProvideAssistContent()
,
che possono offrire i seguenti vantaggi:
- Regola i contenuti forniti intent su rispecchiare meglio il contesto generale dell'attività.
- Fornisce l'URI dei contenuti visualizzati.
- Compila
setClipData()
con altri contenuti di interesse attualmente visualizzati dall'utente.
Nota: è probabile che le app che utilizzano un'implementazione di selezione del testo personalizzata debbano
per implementare onProvideAssistContent()
e chiama setClipData()
.
Implementazione predefinita
Se né il onProvideAssistData()
né il onProvideAssistContent()
viene implementato, il sistema procede comunque
informazioni raccolte automaticamente all'assistente, a meno che l'attuale
è contrassegnata come sicura.
Come mostrato nella figura 3, il sistema utilizza le implementazioni predefinite di onProvideStructure()
e onProvideVirtualStructure()
per
raccogliere testo e visualizzare informazioni gerarchiche. Se la visualizzazione implementa modelli
disegno di testo, sostituisci onProvideStructure()
per fornire
l'assistente con il testo mostrato all'utente chiamando il numero setText(CharSequence)
.
Nella maggior parte dei casi, l'implementazione del supporto per l'accessibilità consente un assistente per ottenere le informazioni di cui ha bisogno. Per implementare il supporto per l'accessibilità, osservare le best practice descritte in Rendere le applicazioni Accessibile, inclusi:
- Fornisci gli attributi
android:contentDescription
. - Compila
AccessibilityNodeInfo
per le visualizzazioni personalizzate. - Marca
assicurati che gli oggetti
ViewGroup
personalizzati siano corretti esporre i propri figli.
Esclusione delle visualizzazioni provenienti dagli assistenti
Per gestire le informazioni sensibili, la tua app può escludere la visualizzazione corrente dall'assistente
impostando il parametro di layout FLAG_SECURE
di WindowManager
. Devi impostare FLAG_SECURE
in modo esplicito per
ogni finestra creata dall'attività, incluse le finestre di dialogo. La tua app può usare anche
setSecure()
da escludere
una piattaforma dall'assistente. Non esiste
meccanismo globale (a livello di app) per escludere tutte le visualizzazioni dall'assistente. Nota
che FLAG_SECURE
non causa l'interruzione dei callback dell'API Assist
viene attivato. L'attività che utilizza FLAG_SECURE
può comunque
fornire informazioni a un'app di assistenza tramite i callback descritti in precedenza
questa guida.
Nota: per gli account aziendali (Android for Work),
l'amministratore può disattivare
la raccolta dei dati dell'assistente per il profilo di lavoro utilizzando il metodo setScreenCaptureDisabled()
dell'API DevicePolicyManager
.
Interazioni vocali
I callback API Assist vengono richiamati frase chiave il rilevamento. Per ulteriori informazioni, consulta Voce Azioni.
Considerazioni sull'ordine Z
Un assistente utilizza una leggera finestra di overlay visualizzata sopra attività in corso. Poiché l'utente può attivare l'assistente in qualsiasi momento, non creare permanenti di avviso di sistema che interferiscono con la finestra overlay, come mostrato nell'immagine Figura 4.
![](https://developer.android.com/static/images/training/assistant/image04.png?authuser=8&hl=it)
Figura 4. Ordine Z livello assistenza
Se la tua app utilizza di avviso di sistema, rimuovile tempestivamente perché rimangono nella schermo peggiora l'esperienza utente.
App di destinazione
Le app dell'assistente in genere sfruttano i link diretti per trovare le app di destinazione. Per rendere una potenziale app di destinazione, ti consigliamo di aggiungere il supporto dei link diretti. La corrispondenza tra il contesto dell'utente corrente e i link diretti o altre potenziali azioni visualizzate nella finestra overlay (mostrata nel passaggio 3 nella Figura 1) è specifica per l'implementazione dell'Assistente Google. Per Ad esempio, l'app Assistente Google utilizza i link diretti e i link alle app per: indirizzare il traffico verso le app di destinazione.
Implementare il proprio assistente
Potresti voler implementare un assistente tutto tuo. Come mostrato nella Figura
2, l'utente può selezionare l'app dell'assistente attivo. La
l'app dell'assistente deve fornire un'implementazione di VoiceInteractionSessionService
e VoiceInteractionSession
come mostrato in
in questo VoiceInteraction
esempio. Richiede anche l'autorizzazione BIND_VOICE_INTERACTION
. L'assistente può quindi
ricevono la gerarchia di testo e visualizzazioni rappresentati come un'istanza di AssistStructure
in onHandleAssist()
.
Riceve lo screenshot tramite onHandleScreenshot()
.