Durante la creazione dell'app, è importante considerare le altre app presenti sul dispositivo con cui deve interagire la tua app. Se la tua app ha come target Android 11 (livello API 30) o versioni successive, il sistema rende visibili alcune app al tuo app automaticamente, ma filtra per impostazione predefinita. Questa guida descrive come rendere visibili queste altre app alla tua app.
Se la tua app ha come target Android 11 o versioni successive e deve interagire
con app diverse da quelle visibili automaticamente, aggiungi
L'elemento <queries>
nella console
manifest. All'interno dell'elemento <queries>
, specifica le altre app di
nome del pacchetto, per firma di intent,
o dall'autorità del fornitore, come descritto di seguito
sezioni.
Nomi di pacchetti specifici
Se conosci le app specifiche su cui vuoi eseguire query o con cui vuoi interagire, ad esempio
le app che si integrano con la tua app o le app di cui utilizzi i servizi, includono i loro
Nomi di pacchetti in un insieme di <package>
all'interno dell'elemento <queries>
:
<manifest package="com.example.game"> <queries> <package android:name="com.example.store" /> <package android:name="com.example.services" /> </queries> ... </manifest>
Comunicare con un'app host in una raccolta
Se sviluppi una libreria Android, puoi dichiarare le tue esigenze di visibilità dei pacchetti
aggiungendo un elemento <queries>
nel file manifest AAR
un file YAML. Questo elemento <queries>
ha lo stesso
come l'elemento che le app possono dichiarare nei propri manifest.
Se la libreria prevede la comunicazione con un'app host, ad esempio l'utilizzo di un
Service, includi un elemento <package>
che
specifica il nome del pacchetto dell'app host:
<!-- Place inside the <queries> element. --> <package android:name=PACKAGE_NAME />
Se includi questa dichiarazione, puoi controllare se l'app host è installata
a interagire, ad esempio chiamando
bindService()
L'app per le chiamate che utilizza la tua raccolta diventa automaticamente
visibile all'app host in seguito a
questa interazione.
Pacchetti che corrispondono alla firma di un filtro per intent
La tua app potrebbe dover eseguire query o interagire con un insieme di app che gestiscono una
uno scopo particolare, ma potresti non conoscere i nomi specifici dei pacchetti
includere. In questo caso, puoi elencare
le firme dei filtri per intent
Elemento <queries>
. L'app può quindi rilevare le app con
corrispondente
<intent-filter>
elementi.
Il seguente esempio di codice mostra un elemento <intent>
che consente all'app
per visualizzare le altre applicazioni installate che supportano la condivisione di immagini JPEG:
<manifest package="com.example.game"> <queries> <intent> <action android:name="android.intent.action.SEND" /> <data android:mimeType="image/jpeg" /> </intent> </queries> ... </manifest>
L'elemento <intent>
ha alcune limitazioni:
- Devi includere esattamente un elemento
<action>
. - Non puoi utilizzare gli attributi
path
,pathPrefix
,pathPattern
oport
in un elemento<data>
. Il sistema si comporta come se avessi impostato il valore di ogni attributo al carattere jolly generico (*
). - Non puoi utilizzare l'attributo
mimeGroup
di un elemento<data>
. All'interno degli elementi
<data>
di un singolo elemento<intent>
, puoi utilizzare ogni dei seguenti attributi al massimo una volta:mimeType
scheme
host
Puoi distribuire questi attributi tra più elementi
<data>
o utilizzare in un singolo elemento<data>
.
L'elemento <intent>
supporta il carattere jolly generico (*
) come
per alcuni attributi:
- Attributo
name
dell'elemento<action>
. - Il sottotipo dell'attributo
mimeType
di un elemento<data>
(image/*
). - Il tipo e il sottotipo dell'attributo
mimeType
di un elemento<data>
(*/*
). - Attributo
scheme
di un elemento<data>
. - Attributo
host
di un elemento<data>
.
Se non diversamente specificato nell'elenco precedente, il sistema non supporta una
combinazione di caratteri di testo e caratteri jolly, ad esempio prefix*
.
Pacchetti che utilizzano un'autorità specifica
Se devi eseguire query su contenuti
fornitore ma
non conosci i nomi dei pacchetti specifici, puoi dichiarare l'autorità del provider
in un elemento <provider>
, come mostrato
nel seguente snippet:
<manifest package="com.example.suite.enterprise"> <queries> <provider android:authorities="com.example.settings.files" /> </queries> ... </manifest>
Puoi dichiarare le autorità dei provider in un singolo elemento <queries>
. All'interno del
<queries>
, puoi dichiarare uno o più elementi <provider>
. R
L'elemento <provider>
può includere una singola autorità del fornitore o una
elenco delimitato da punti e virgola di autorità di provider.
Tutte le app (sconsigliato)
In rari casi, la tua app potrebbe dover inviare query o interagire con tutte le app installate
su un dispositivo, indipendentemente dai componenti che contengono. Per consentire alla tua app di
visualizzare tutte le altre app installate, il sistema
QUERY_ALL_PACKAGES
autorizzazione.
Alcuni esempi di casi d'uso in cui
L'autorizzazione QUERY_ALL_PACKAGES
che è opportuno includere sono:
- App di accessibilità
- Browser
- App di gestione dei dispositivi
- App per la sicurezza
- App antivirus
Tuttavia, in genere è possibile soddisfare le esigenze dell'app di richieste di assistenza interagendo con il gruppo di app visibili automaticamente e dichiarando le altre app a cui deve accedere la tua app nel file manifest. A rispettare la privacy dell'utente, la tua app deve richiedere la quantità minima di pacchetti la visibilità necessaria per far funzionare l'app.
Questo aggiornamento delle norme da parte di Google
Gioca
fornisce linee guida per le app che richiedono l'autorizzazione QUERY_ALL_PACKAGES
.