Richiedi autorizzazioni posizione

Esistono diversi modi per richiedere informazioni sulla posizione dell'utente su Android e il percorso migliore varia a seconda del 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ù generali per ridurre al minimo le richieste di autorizzazioni.

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 informazioni 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:

  • In un'app di navigazione, una funzionalità consente agli utenti di ricevere indicazioni passo passo.
  • In 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 utilizza la posizione in primo piano se una sua funzionalità accede alla posizione attuale del dispositivo in una delle seguenti situazioni:

  • Un'attività che appartiene alla tua app è visibile.
  • La tua app esegue un servizio in primo piano. Quando è in esecuzione un servizio in primo piano, il sistema informa l'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 lo schermo del dispositivo.

    Inoltre, devi dichiarare un tipo di servizio in primo piano di location, come mostrato nel seguente snippet di codice. 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 la distinzione aggiuntiva di dover accedere alla posizione dell'utente solo in punti specifici dell'esperienza dell'app, anziché aggiornarla costantemente durante l'utilizzo dell'app. In questi casi, le app devono utilizzare il pulsante della 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 di utilizzare il pulsante Posizione. Per maggiori dettagli, consulta le norme relative al pulsante della posizione.

Posizione in background

Un'app richiede l'accesso alla posizione in background se una funzionalità dell'app condivide costantemente la posizione con altri utenti o utilizza l'API Geofencing. Ecco alcuni esempi:

  • In un'app di condivisione della posizione della famiglia, una funzionalità consente agli utenti di condividere continuamente la posizione con i membri della famiglia.
  • In un'app IoT, una funzionalità consente agli utenti di configurare i dispositivi di casa in modo che si spengano quando l'utente esce di casa e si riaccendano quando l'utente torna a casa.

Il sistema considera che la tua app utilizza 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 accesso alla posizione dichiarate dalla tua app.

Su Android 10 (livello API 29) e versioni successive, devi dichiarare l' 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>

Accuratezza

Android supporta i seguenti livelli di accuratezza della posizione:

Approssimativa
Fornisce una stima della posizione del dispositivo. Se questa stima della posizione proviene da LocationManagerService o FusedLocationProvider, questa stima è accurata entro circa 3 chilometri quadrati (circa 1,2 miglia quadrate). La tua app può ricevere posizioni a questo livello di accuratezza quando dichiari l'autorizzazione ACCESS_COARSE_LOCATION, ma non l'autorizzazione ACCESS_FINE_LOCATION.
Esatta
Fornisce una stima della posizione del dispositivo che sia la più accurata possibile. Se la stima della posizione proviene da LocationManagerService o FusedLocationProvider, di solito è entro circa 50 metri (160 piedi) e a volte è accurata entro pochi metri (10 piedi) o meglio. La tua app può ricevere posizioni a questo livello di accuratezza quando dichiari l'autorizzazione ACCESS_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 dalla tua app.

La tua app deve comunque funzionare quando l'utente concede solo l'accesso 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 della 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.

Verificare i requisiti di accesso alla posizione nelle dipendenze SDK dell'app

Verifica 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 post del blog su Medium Getting to know the behaviors of your SDK dependencies per more.

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.