Dopo aver creato le scorciatoie, potrebbe essere necessario gestirle per l'intera durata delle scorciatoie la tua app. Ad esempio, potresti voler ottimizzare l'app determinando il spesso gli utenti completano azioni specifiche con le scorciatoie. In un altro caso, potresti decidere di disattivare una scorciatoia bloccata per impedire alla tua app di che eseguono azioni obsolete o mancanti. Per le scorciatoie a cui viene fatto riferimento in conversazioni, potrebbe essere utile monitorare l'utilizzo per fornire indicatori che migliorano il ranking delle scorciatoie.
In questa pagina vengono descritti questi e molti altri metodi comuni per gestire scorciatoie.
Comportamento della scorciatoia
Le seguenti sezioni contengono informazioni generali sul comportamento delle scorciatoie, tra cui visibilità, ordine di visualizzazione e ranking.
Visibilità scorciatoia
Le scorciatoie statiche e le scorciatoie dinamiche vengono visualizzate in Avvio app o quando l'utente esegue un gesto specifico o un comando vocale. Attivato Avvio app supportati, il gesto è un tocco e tieni premuta l'icona in Avvio applicazioni dell'app, ma il gesto potrebbe essere diverso su altre app Avvio app. Con Google Assistente, le scorciatoie possono essere visualizzate all'interno dell'assistente o lanciate da un utente comando vocale.
Il corso LauncherApps
fornisce API a cui le app Avvio app possono accedere
scorciatoie.
Poiché le scorciatoie bloccate vengono visualizzate in Avvio app, sono sempre visibili. Una scorciatoia bloccata viene rimossa da Avvio app soltanto nelle seguenti situazioni:
- L'utente lo rimuove.
- L'app associata alla scorciatoia viene disinstallata.
- L'utente cancella i dati di un'app in Impostazioni > App e notifiche, Selezione dell'app e poi tocca Spazio di archiviazione > Libera spazio di archiviazione.
Condividere i target sono un sottoinsieme di scorciatoie dinamiche visualizzate nella riga della condivisione diretta Foglio di condivisione di Android.
Ordine di visualizzazione della scorciatoia
Quando in Avvio app vengono visualizzate le scorciatoie di un'app, queste devono essere visualizzate come segue: ordine:
- Scorciatoie statiche: scorciatoie il cui metodo
isDeclaredInManifest()
restituiscetrue
. - Scorciatoie dinamiche: scorciatoie per cui
ShortcutInfo.isDynamic()
restituiscetrue
.
All'interno di ogni tipo di scorciatoia, statica e dinamica, le scorciatoie vengono ordinate in ordine di:
aumentando il ranking secondo ShortcutInfo.getRank
. Assistente Google
prende in considerazione anche il ranking delle scorciatoie nel determinare le scorciatoie contestuali da visualizzare
utenti.
I ranking sono numeri interi sequenziali non negativi. Le scorciatoie statiche sono classificate in base a
dalla prima all'ultima nell'ordine in cui appaiono nel file shortcuts.xml
. Per creatività dinamiche
scorciatoie, puoi aggiornare i livelli delle scorciatoie esistenti quando chiami
updateShortcuts(Context, List)
,
addDynamicShortcuts(Context, List)
,
pushDynamicShortcut(Context, ShortcutInfoCompat)
oppure
setDynamicShortcuts(Context, List)
.
L'ordine dei target di condivisione si basa su vari fattori, tra cui gli utenti passati
storia, recency, frequenza
suggerimento ranking,
utilizzo di app e la priorità impostata per la conversazione associata a un
scorciatoia per la condivisione. Condividi le destinazioni create utilizzando
API Sharing Shortcuts
hanno la priorità rispetto ai target di condivisione prodotti
ChooserTargetService
:
che è stata ritirata in Android 11. In target di condivisione per Android 12 e versioni successive
generate dall'elemento ChooserTargetService
deprecato non verranno più visualizzati in
foglio di condivisione.
La maggior parte delle app Avvio app mostra un massimo di quattro scorciatoie. Per qualsiasi combinazione di scorciatoie statiche e dinamiche definite, Avvio app mostra al massimo due scorciatoie statiche e due scorciatoie dinamiche. Ad esempio, se definire quattro scorciatoie statiche e creare in modo programmatico tre l'Avvio app mostra le prime due scorciatoie statiche e le scorciatoie dinamiche con ranking più elevato.
Gestisci più intent e attività
Se vuoi che l'app esegua più operazioni quando l'utente attiva un puoi configurarla per attivare attività successive. Puoi può farlo assegnando più intent, iniziando un'attività o l'impostazione di flag di intent, a seconda del tipo di scorciatoia.
Assegna più intent
Quando crei una scorciatoia con ShortcutInfoCompat.Builder
, puoi utilizzare
setIntents()
anziché setIntent()
. Chiamate il numero setIntents()
,
può avviare più attività all'interno dell'app quando l'utente seleziona una scorciatoia,
posizionando tutte le attività dell'elenco, tranne le ultime, sul stack posteriore. Se
l'utente tocca il pulsante Indietro del dispositivo e vede un'altra attività nell'app
anziché tornare all'Avvio app del dispositivo.
Iniziare un'attività dall'altra
Le scorciatoie statiche non possono avere flag personalizzati per intent. Il primo intent di un container
la scorciatoia ha sempre Intent.FLAG_ACTIVITY_NEW_TASK
e
Intent.FLAG_ACTIVITY_CLEAR_TASK
impostato. Ciò significa che quando la tua app
è in esecuzione, tutte le attività esistenti nell'app vengono eliminate quando viene
viene avviata. Se non vuoi questo comportamento, puoi utilizzare un trampolino elastico.
: un'attività invisibile che inizia un'altra attività, nel
Activity.onCreate(Bundle)
che chiama Activity.finish()
:
- Nel file
AndroidManifest.xml
, includi l'assegnazione dell'attributoandroid:taskAffinity=
" nell'attività del trampolino. - Nel file delle risorse delle scorciatoie, fai riferimento all'attività del trampolino nella all'interno della scorciatoia statica.
Per ulteriori informazioni sulle attività con trampolino, consulta Iniziare un'attività da un altro.
Imposta flag di intent
Puoi pubblicare scorciatoie dinamiche con qualsiasi set di flag Intent
.
Preferibilmente, specifica Intent.FLAG_ACTIVITY_CLEAR_TASK
insieme all'altro
e i flag facoltativi. In caso contrario, se tenti di avviare un'altra attività mentre l'app è
è in esecuzione, l'attività target potrebbe non essere visualizzata.
Per scoprire di più sulle attività e sui flag di intent, consulta Attività e lo stack precedente.
Aggiorna scorciatoie
L'icona in Avvio applicazioni di ogni app può contenere al massimo una serie di elementi statici e dinamici
le scorciatoie combinate che corrispondono al valore restituito
getMaxShortcutCountPerActivity
Non c'è un limite al numero di
le scorciatoie fissate che un'app può creare.
Quando una scorciatoia dinamica viene bloccata, anche se il publisher la rimuove come
scorciatoia fissata, la scorciatoia bloccata è ancora visibile e avviabile. Ciò consente
un'app ha più di getMaxShortcutCountPerActivity()
di scorciatoie.
Considera l'esempio seguente, che presuppone che il valore restituito
getMaxShortcutCountPerActivity()
è 4
:
- Un'app di chat pubblica quattro scorciatoie dinamiche, che rappresentano le quattro conversazioni recenti: c1, c2, c3 e c4.
- L'utente blocca tutte e quattro le scorciatoie.
- Successivamente, l'utente avvia altre tre conversazioni: c5, c6 e c7. La l'app del publisher ripubblica le sue scorciatoie dinamiche. La nuova scorciatoia dinamica sono: c4, c5, c6 e c7.
L'app deve rimuovere c1, c2 e c3 perché non è possibile visualizzarne più di quattro scorciatoie dinamiche. Tuttavia, c1, c2 e c3 sono ancora scorciatoie bloccate che all'utente può accedere e avviare.
L'utente può quindi accedere a un totale di sette scorciatoie che collegano alle attività in l'app del publisher. Questo perché il totale include il numero massimo di e le tre scorciatoie fissate.
- L'app può usare
updateShortcuts(Context, List)
per aggiornare uno qualsiasi dei sette scorciatoie esistenti. Ad esempio, potresti aggiornare questo insieme di scorciatoie quando la chat si avvicina le icone cambiano. - Puoi utilizzare le
addDynamicShortcuts(Context, List)
esetDynamicShortcuts(Context, List)
metodi per aggiornare le scorciatoie esistenti con gli stessi ID. ma non puoi utilizzarle per aggiornare gli asset non dinamici, scorciatoie bloccate, perché questi due metodi tentano di convertire gli elenchi scorciatoie alle scorciatoie dinamiche.
Non esiste un limite al numero di scorciatoie che è possibile inviare tramite push per la visualizzazione
app di assistenza, come l'Assistente Google. Utilizza la pushDynamicShortcut()
della libreria Jetpack di ShortcutManagerCompat
per creare e aggiornare
scorciatoie da utilizzare nelle app dell'assistente. Inoltre, aggiungi Google Shortcuts Integration
raccolta alla tua app per rendere i link dinamici idonei alla pubblicazione su Google
Assistente Google.
Per ulteriori informazioni sulle linee guida relative alle scorciatoie app, incluso l'aggiornamento delle scorciatoie, consulta le Best practice per le scorciatoie.
Gestire le modifiche alle impostazioni internazionali di sistema
Le app devono aggiornare le scorciatoie dinamiche e bloccate quando ricevono il
Trasmissione Intent.ACTION_LOCALE_CHANGED
che indica una modifica al sistema
impostazioni internazionali.
Monitora l'utilizzo delle scorciatoie
Per determinare le situazioni in cui vengono visualizzate le scorciatoie statiche e dinamiche,
l'Avvio app esamina la cronologia di attivazione delle scorciatoie. Per le scorciatoie statiche,
Puoi monitorare quando gli utenti completano azioni specifiche all'interno dell'app
chiamando il metodo reportShortcutUsed()
e trasmettendogli l'ID di
scorciatoia quando si verifica uno dei seguenti eventi:
- L'utente seleziona la scorciatoia con l'ID specificato.
- All'interno dell'app, l'utente completa manualmente l'azione corrispondente ai la stessa scorciatoia.
L'app monitora l'utilizzo delle scorciatoie dinamiche chiamando il pulsante
pushDynamicShortcut()
e passargli l'ID della scorciatoia quando
si verifica un evento pertinente. Il push dell'utilizzo delle scorciatoie dinamiche con questo metodo consente
le app di assistenza, come l'Assistente Google, suggeriscono scorciatoie pertinenti agli utenti.
Dato che il metodo pushDynamicShortcut()
segnala l'utilizzo quando viene chiamato, non chiamare
il metodo reportShortcutUsed()
per le stesse scorciatoie.
Per le scorciatoie relative alle conversazioni, è importante monitorare l'utilizzo per le chiamate in uscita e messaggi in arrivo. Per maggiori dettagli, consulta le best practice per le persone e conversazioni.
Disattiva scorciatoie
Poiché la tua app e i suoi utenti possono bloccare scorciatoie in Avvio app del dispositivo,
è possibile che queste scorciatoie fissate possano indirizzare gli utenti a eseguire azioni nella tua app
non aggiornati o che non esistono più. Per gestire questa situazione, puoi
disattiva le scorciatoie che non vuoi che gli utenti selezionino chiamando
disableShortcuts
, che rimuove le scorciatoie specificate dal feed statico
e le scorciatoie dinamiche elencano
e disattivano le copie fissate di queste scorciatoie. Tu
puoi anche utilizzare una versione sovraccarica di questo metodo che accetta un
CharSequence
come messaggio di errore personalizzato. Il messaggio di errore viene visualizzato.
Quando gli utenti tentano di avviare qualsiasi scorciatoia disattivata.
Limitazione di frequenza
Quando utilizzi l'setDynamicShortcuts(), addDynamicShortcuts()
o
updateShortcuts()
, potresti essere in grado di chiamare questi metodi solo
numero specifico di volte in un'app in background: un'app senza attività o
servizi in primo piano. Il limite al numero specifico di volte in cui è possibile
chiamati limitazione di frequenza. Questa funzione impedisce
ShortcutManagerCompat
da un consumo eccessivo di risorse del dispositivo.
Quando la limitazione di frequenza è attiva, isRateLimitingActive()
restituisce true.
Tuttavia, la limitazione di frequenza viene reimpostata durante determinati eventi, quindi anche le app in background
può chiamare metodi ShortcutManager
fino a quando non viene raggiunto nuovamente il limite di frequenza. Questi
includono i seguenti:
- Un'app appare in primo piano.
- Le impostazioni internazionali del sistema cambiano.
- L'utente esegue l'azione risposta integrata su una notifica.
Se riscontri una limitazione di frequenza durante lo sviluppo o il test, puoi selezionare
Opzioni sviluppatore > Reimposta il limite di frequenza di ShortcutManager dal dispositivo
impostazioni oppure inserire il seguente comando in adb
:
$ adb shell cmd shortcut reset-throttling [ --user your-user-id ]
Backup e ripristino
Puoi consentire agli utenti di eseguire operazioni di backup e ripristino sulla tua app quando
cambiare dispositivo includendo l'elemento android:allowBackup="true
" attributo
nel file manifest dell'app. Se supporti il backup e il ripristino, conserva
tieni presenti i seguenti punti sulle scorciatoie app:
- Le scorciatoie statiche vengono ripubblicate automaticamente, ma solo dopo che l'utente Reinstalla l'app su un nuovo dispositivo.
- Non è stato eseguito il backup delle scorciatoie dinamiche, quindi includi nella tua app la logica per ripubblicarla quando un utente apre la tua app su un nuovo dispositivo.
- Le scorciatoie bloccate vengono ripristinate automaticamente nell'Avvio app del dispositivo, ma non esegue il backup delle icone associate alle scorciatoie fissate. Pertanto, risparmia le scorciatoie fissate di immagini nella tua app in modo che sia facile ripristinarle un nuovo dispositivo.
Il seguente snippet di codice mostra il modo migliore per ripristinare le creatività dinamiche dell'app scorciatoie e come controllare se le scorciatoie fissate dell'app sono state mantenute:
Kotlin
class MyMainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (ShortcutManagerCompat.dynamicShortcuts.size == 0) { // Application restored. Re-publish dynamic shortcuts. if (ShortcutManagerCompat.pinnedShortcuts.size > 0) { // Pinned shortcuts are restored. Use updateShortcuts() to make // sure they contain up-to-date information. } } } // ... }
Java
public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (ShortcutManagerCompat.getDynamicShortcuts().size() == 0) { // Application restored. Re-publish dynamic shortcuts. if (ShortcutManagerCompat.getPinnedShortcuts().size() > 0) { // Pinned shortcuts are restored. Use pdateShortcuts() to make // sure they contain up-to-date information. } } } // ... }