Richiedi autorizzazioni posizione

Esistono diversi modi per richiedere i dati sulla posizione dell'utente su Android e il percorso migliore varia in base al caso d'uso. Questa guida descrive diversi scenari di accesso alla posizione e spiega come richiedere le autorizzazioni di accesso alla posizione in ogni caso.

Per iniziare, consulta le best practice per tutte le autorizzazioni di runtime, nonché le indicazioni più ampie per ridurre al minimo le richieste di autorizzazione.

Tipi di accesso alla posizione

Ogni autorizzazione ha una combinazione delle seguenti caratteristiche:

Posizione in primo piano

Se la tua app contiene una funzionalità che condivide o riceve dati sulla posizione una sola 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 che la tua app utilizzi la posizione in primo piano se una funzionalità della tua app accede alla posizione attuale del dispositivo in una delle seguenti situazioni:

  • Un'attività che appartiene alla tua app è visibile.
  • La tua app sta eseguendo un servizio in primo piano. Quando un servizio in primo piano è in esecuzione, il sistema aumenta la consapevolezza dell'utente mostrando una notifica persistente. L'app mantiene l'accesso quando viene posizionata 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à di accedere alla 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>

Accesso una tantum Oltre ad accedere ai dati sulla posizione in primo piano, alcuni casi d'uso hanno l'ulteriore distinzione di dover accedere alla posizione dell'utente solo in punti specifici dell'esperienza con l'app, anziché aggiornarla costantemente durante l'utilizzo dell'app. In questi casi, le app devono utilizzare il pulsante posizione per richiedere l'accesso alla posizione per la singola sessione di utilizzo dell'app. Inoltre, se la tua app ha come target Android 17 (livello API 37) o versioni successive e contiene solo funzionalità che richiedono l'accesso alla posizione basato sulla sessione, le norme di Google Play richiedono l'utilizzo del pulsante posizione. Per maggiori dettagli, consulta le norme relative al pulsante posizione.

Posizione in background

Un'app richiede l'accesso alla posizione in background se una funzionalità al suo interno 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 speggano quando l'utente esce di casa e si riaccendano quando l'utente torna a casa.

Il sistema considera che la tua app utilizzi la posizione in background se accede alla posizione corrente 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 accesso alla posizione dichiarate dalla tua app.

Su Android 10 (livello API 29) e versioni successive, devi dichiarare l'autorizzazione ACCESS_BACKGROUND_LOCATION nel manifest della tua app per richiedere l'accesso alla posizione in background in fase di runtime. Nelle versioni precedenti di Android, quando l'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>

Accuratezza

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 o FusedLocationProvider, la stima è precisa entro un raggio di circa 3 chilometri quadrati. La tua app può ricevere le posizioni con questo livello di precisione quando dichiari l'autorizzazione ACCESS_COARSE_LOCATION, ma non l'autorizzazione ACCESS_FINE_LOCATION.
Esatta
Fornisce una stima della posizione del dispositivo il più precisa possibile. Se la stima della posizione proviene da LocationManagerService o FusedLocationProvider, di solito ha un margine di errore di circa 50 metri e a volte è precisa entro pochi metri o meno. La tua app può ricevere posizioni con questo livello di precisione quando dichiari l'autorizzazione ACCESS_FINE_LOCATION.

Se l'utente concede l'autorizzazione di accesso alla posizione approssimativa, l'app ha accesso solo alla posizione approssimativa, indipendentemente dalle autorizzazioni di accesso alla posizione dichiarate dall'app.

L'app deve continuare a 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 della 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 una notifica da inviare 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 per le località 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ù, consulta il blog post 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

Esempi

  • App di esempio per dimostrare l'utilizzo delle autorizzazioni di accesso alla posizione.