Per proteggere la privacy degli utenti, le app che utilizzano i servizi di localizzazione devono richiedere le autorizzazioni di accesso alla posizione.
Diverse autorizzazioni sono correlate alla posizione. Le autorizzazioni che richiedi e la modalità di richiesta dipendono dai requisiti di localizzazione per il caso d'uso della tua app.
Questa pagina descrive i diversi tipi di requisiti di localizzazione e spiega come richiedere le autorizzazioni di localizzazione in ogni caso.
Per richiedere le autorizzazioni di accesso alla posizione, segui le best practice per tutte le autorizzazioni di runtime.
Tipi di accesso alla posizione
Ogni autorizzazione presenta una combinazione delle seguenti caratteristiche:
- Categoria: posizione in primo piano o posizione in background.
- Precisione: posizione esatta o approssimativa.
Posizione in primo piano
Se la tua app contiene una funzionalità che condivide o riceve informazioni sulla posizione solo una volta o per un periodo di tempo definito, questa funzionalità richiede l'accesso alla posizione in primo piano. Ecco alcuni esempi:
- All'interno di un'app di navigazione, una funzionalità consente agli utenti di ricevere indicazioni stradali passo passo.
- All'interno di un'app di messaggistica, una funzionalità consente agli utenti di condividere la propria posizione attuale con un altro utente.
Il sistema considera la tua app come se utilizzasse la posizione in primo piano se una funzionalità della tua app accede alla posizione attuale del dispositivo in una delle seguenti situazioni:
- È visibile un'attività che appartiene alla tua app.
La tua app esegue un servizio in primo piano. Quando un servizio in primo piano è in esecuzione, il sistema aumenta la consapevolezza dell'utente mostrando una notifica persistente. La tua app mantiene l'accesso quando viene messa in background, ad esempio quando l'utente preme il pulsante Home sul dispositivo o spegne il display del dispositivo.
Inoltre, devi dichiarare un tipo di servizio in primo piano di
location
, come mostrato nello snippet di codice seguente. Su Android 10 (livello API 29) e versioni successive, devi dichiarare questo tipo di servizio in primo piano.<!-- Recommended for Android 9 (API level 28) and lower. --> <!-- Required for Android 10 (API level 29) and higher. --> <service android:name="MyNavigationService" android:foregroundServiceType="location" ... > <!-- Any inner elements would go here. --> </service>
Dichiari la necessità della posizione in primo piano quando la tua app richiede l'autorizzazione
ACCESS_COARSE_LOCATION
o l'autorizzazione ACCESS_FINE_LOCATION
, come mostrato nel seguente snippet:
<manifest ... >
<!-- Always include this permission -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Include only if your app benefits from precise location access. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
Posizione in background
Un'app richiede l'accesso alla posizione in background se una funzionalità all'interno dell'app condivide costantemente la posizione con altri utenti o utilizza l'API Geofencing. Ecco alcuni esempi:
- All'interno di un'app di condivisione della posizione con il gruppo Famiglia, una funzionalità consente agli utenti di condividere continuamente la posizione con i membri del gruppo Famiglia.
- All'interno di un'app IoT, una funzionalità consente agli utenti di configurare i propri dispositivi per la casa in modo che si spengano quando l'utente esce di casa e si riaccendano quando torna a casa.
Il sistema considera che la tua app utilizzi la posizione in background se accede alla posizione attuale del dispositivo in qualsiasi situazione diversa da quelle descritte nella sezione Posizione in primo piano. La precisione della posizione in background è la stessa della precisione della posizione in primo piano, che dipende dalle autorizzazioni di localizzazione dichiarate dall'app.
Su Android 10 (livello API 29) e versioni successive, devi dichiarare l'autorizzazione
ACCESS_BACKGROUND_LOCATION
nel file manifest della tua app per
richiedere l'accesso alla posizione in background in fase di runtime. Nelle versioni precedenti di
Android, quando la tua app riceve l'accesso alla posizione in primo piano, riceve automaticamente
anche l'accesso alla posizione in background.
<manifest ... >
<!-- Required only when requesting background location access on
Android 10 (API level 29) and higher. -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>
Precisione
Android supporta i seguenti livelli di precisione della localizzazione:
- Approssimativa
- Fornisce una stima della posizione del dispositivo. Se questa stima della posizione proviene da
LocationManagerService
oFusedLocationProvider
, è precisa entro un raggio di circa 3 chilometri quadrati (circa 1,2 miglia quadrate). La tua app può ricevere posizioni a questo livello di precisione quando dichiari l'autorizzazioneACCESS_COARSE_LOCATION
, ma non l'autorizzazioneACCESS_FINE_LOCATION
. - Esatta
- Fornisce una stima della posizione del dispositivo il più precisa possibile.
Se la stima della posizione proviene da
LocationManagerService
oFusedLocationProvider
, di solito è precisa entro circa 50 metri (160 piedi) e a volte anche entro pochi metri (10 piedi) o meno. La tua app può ricevere posizioni a questo livello di precisione quando dichiari l'autorizzazioneACCESS_FINE_LOCATION
.
Se l'utente concede l'autorizzazione di accesso alla posizione approssimativa, la tua app ha accesso solo alla posizione approssimativa, indipendentemente dalle autorizzazioni di accesso alla posizione dichiarate.
La tua app deve comunque funzionare quando l'utente concede l'accesso solo alla posizione approssimativa. Se una funzionalità della tua app richiede assolutamente l'accesso alla posizione esatta
utilizzando l'autorizzazione ACCESS_FINE_LOCATION
, puoi chiedere all'utente di consentire alla tua
app di accedere alla posizione esatta.
Promemoria per la concessione dell'accesso alla posizione in background
Su Android 10 (livello API 29) e versioni successive, quando una funzionalità della tua app accede alla posizione del dispositivo in background per la prima volta dopo che l'utente ha concesso l'accesso alla posizione in background, il sistema pianifica l'invio di una notifica all'utente. Questa notifica ricorda all'utente che ha consentito alla tua app di accedere alla posizione del dispositivo in qualsiasi momento. Un esempio di notifica è mostrato nella figura 8.
Verifica i requisiti di localizzazione nelle dipendenze dell'SDK della tua app
Controlla se la tua app utilizza SDK che dipendono dalle autorizzazioni di accesso alla posizione,
in particolare l'autorizzazione ACCESS_FINE_LOCATION
. Per saperne di più, leggi il post del blog Getting to know the
behaviors of your SDK dependencies su Medium.
Risorse aggiuntive
Per ulteriori informazioni sulle autorizzazioni di accesso alla posizione in Android, consulta i seguenti materiali:
Codelab
Video
Campioni
- App di esempio per dimostrare l'utilizzo delle autorizzazioni di accesso alla posizione.