Richiedi autorizzazioni posizione

Per proteggere la privacy degli utenti, le app che utilizzano i servizi di geolocalizzazione devono richiedere le autorizzazioni di accesso alla posizione.

Esistono più autorizzazioni correlate alla posizione. Le autorizzazioni richieste e il modo in cui vengono richieste dipendono dai requisiti relativi alla posizione per il caso d'uso della tua app.

Questa pagina descrive i diversi tipi di requisiti relativi alla posizione e spiega come richiedere le autorizzazioni di accesso alla posizione 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 ha una combinazione delle seguenti caratteristiche:

Posizione in primo piano

Se la tua app contiene una funzionalità che condivide o riceve dati 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:

  • In 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 corrente 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 è in esecuzione un servizio in primo piano, il sistema avvisa l'utente mostrando una notifica persistente. L'app mantiene l'accesso quando è in background, ad esempio quando l'utente preme il pulsante Home sul dispositivo o spegne il display.

    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>

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 di gruppo Famiglia, una funzionalità consente agli utenti di condividere continuamente la posizione con i membri del gruppo 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 torna.

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 sulla 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 file manifest della tua app per poter 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>

Precisione

Android supporta i seguenti livelli di precisione della posizione:

Approssimativa
Fornisce una stima della posizione del dispositivo. Se questa stima della posizione proviene da LocationManagerService o FusedLocationProvider, la stima è precisa entro circa 3 chilometri quadrati. La tua app può ricevere posizioni con questo livello di precisione se dichiari l'autorizzazione ACCESS_COARSE_LOCATION, ma non l'autorizzazione ACCESS_FINE_LOCATION.
Esatta
Fornisce una stima della posizione del dispositivo il più accurata possibile. Se la stima della posizione è di LocationManagerService o FusedLocationProvider, in genere è compresa in circa 50 metri e a volte è precisa al massimo di qualche metro o meglio. 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, la tua app ha accesso solo alla posizione approssimativa, indipendentemente dalle autorizzazioni di accesso alla posizione dichiarate dalla tua app.

La tua app dovrebbe comunque funzionare quando l'utente concede l'accesso alla posizione solo 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 relativo alla 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 di aver consentito alla tua app di accedere alla posizione del dispositivo in qualsiasi momento. Nella figura 8 è riportata una notifica di esempio.

Verificare la presenza di requisiti relativi alla posizione nelle dipendenze dell'SDK dell'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 Informazioni sui comportamenti delle dipendenze SDK 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.