Richiedi autorizzazioni posizione

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:

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 o FusedLocationProvider, è 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'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 è 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'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.

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.