Ottimizzare l'utilizzo della posizione per scenari reali

Questa sezione descrive alcuni scenari tipici di raccolta dei dati sulla posizione, insieme a consigli per un utilizzo ottimale delle API di geofencing e dei fornitori di dati sulla posizione combinati.

Aggiornamenti visibili all'utente o in primo piano

Esempio: un'app di mappe che richiede aggiornamenti frequenti e precisi con una latenza molto bassa. Tutti gli aggiornamenti vengono eseguiti in primo piano: l'utente avvia un'attività, consumerà i dati sulla posizione e poi la interromperà dopo poco tempo.

Utilizza il metodo setPriority() con un valore di PRIORITY_HIGH_ACCURACY o PRIORITY_BALANCED_POWER_ACCURACY.

L'intervallo specificato nel metodo setInterval() dipende dal caso d'uso: per gli scenari in tempo reale, imposta il valore su pochi secondi; in caso contrario, limita la durata a pochi minuti (consigliati circa due minuti o più per ridurre al minimo l'utilizzo della batteria).

Conoscere la posizione del dispositivo

Esempio: un'app meteo vuole conoscere la posizione del dispositivo.

Utilizza il metodo getLastLocation(), che restituisce la località disponibile più recente (che in rari casi può essere null). Questo metodo offre un modo semplice per ottenere la posizione e non comporta costi associati alla richiesta attiva di aggiornamenti sulla posizione. Da utilizzare in combinazione con il metodo isLocationAvailable(), che restituisce true quando la posizione restituita da getLastLocation() è ragionevolmente aggiornata.

Avvia gli aggiornamenti quando un utente si trova in una posizione specifica

Esempio: richiesta di aggiornamenti quando un utente si trova entro una determinata distanza dal lavoro, da casa o da un'altra località.

Utilizza i perimetri virtuali in combinazione con gli aggiornamenti dei fornitori di posizione combinati. Richiedi aggiornamenti quando l'app riceve un attivatore di ingresso nel recinto virtuale e rimuovi gli aggiornamenti quando l'app riceve un attivatore di uscita dal recinto virtuale. In questo modo, l'app riceve aggiornamenti sulla posizione più granulari solo quando l'utente entra in un'area definita.

Il flusso di lavoro tipico per questo scenario potrebbe prevedere la visualizzazione di una notifica al passaggio del recinto virtuale e l'avvio di un'attività contenente il codice per richiedere aggiornamenti quando l'utente tocca la notifica.

Avvia gli aggiornamenti in base allo stato dell'attività dell'utente

Esempio: richiesta di aggiornamenti solo quando l'utente è alla guida o in bicicletta.

Utilizza l'API Rilevamento attività in combinazione con gli aggiornamenti dei fornitori di servizi di localizzazione combinati. Richiedi aggiornamenti quando viene rilevata l'attività target erimuovi gli aggiornamenti quando l'utente smette di eseguire l'attività.

Il flusso di lavoro tipico per questo caso d'uso potrebbe prevedere la visualizzazione di una notifica per l'attività rilevata e l'avvio di un'attività contenente il codice per richiedere aggiornamenti quando l'utente tocca la notifica.

Aggiornamenti della posizione in background di lunga durata legati ad aree geografiche

Esempio: l'utente vuole ricevere una notifica quando il dispositivo si trova nelle vicinanze di un rivenditore.

Questo è un ottimo caso d'uso per il geofencing. Poiché il caso d'uso coinvolge quasi certamente la posizione in background, utilizza il metodo addGeofences(GeofencingRequest, PendingIntent).

Devi impostare le seguenti opzioni di configurazione:

  • Se monitori le transizioni di tempo di permanenza, utilizza il metodo setLoiteringDelay() passando un valore di circa cinque minuti o meno.

  • Utilizza setNotificationResponsiveness(), passando un valore di circa cinque minuti. Tuttavia, ti consigliamo di utilizzare un valore di circa dieci minuti se la tua app può gestire il ritardo aggiuntivo nella reattività.

Un'app può registrare al massimo 100 recinti virtuali alla volta. In un caso d'uso in cui un'app vuole monitorare un numero elevato di opzioni di rivenditori, l'app potrebbe volere registrarsi in un recinto virtuale di grandi dimensioni (a livello di città) e registrare dinamicamente recinti virtuali più piccoli (per le sedi all'interno della città) per i negozi all'interno del recinto virtuale più grande. Quando un utente entra in un recinto virtuale di grandi dimensioni, aggiungi recinti virtuali più piccoli; quando l'utente esce dal recinto virtuale più grande, rimuovi i recinti virtuali più piccoli e registra di nuovo i recinti virtuali per una nuova area.

Aggiornamenti della posizione in background di lunga durata senza un componente dell'app visibile

Esempio: un'app che monitora passivamente la posizione

Se possibile, utilizza il metodo setPriority() con l'opzione PRIORITY_NO_POWER perché non comporta quasi alcun consumo della batteria. Se non è possibile utilizzare PRIORITY_NO_POWER, usa PRIORITY_BALANCED_POWER_ACCURACY o PRIORITY_LOW_POWER, ma evita di utilizzare PRIORITY_HIGH_ACCURACY per attività in background prolungate perché questa opzione consuma notevolmente la batteria.

Se hai bisogno di più dati sulla posizione, utilizza la posizione passiva chiamando il metodo setFastestInterval() passando un valore inferiore a quello passato a setInterval(). Se combinata con l'opzione PRIORITY_NO_POWER, la posizione passiva può fornire opportunisticamente la posizione calcolata da altre app senza costi aggiuntivi.

Modera la frequenza aggiungendo un po' di latenza, utilizzando il metodo setMaxWaitTime(). Ad esempio, se utilizzi il metodo setinterval() con un valore di circa 10 minuti, ti consigliamo di chiamare setMaxWaitTime() con un valore compreso tra 30 e 60 minuti. Se utilizzi queste opzioni, la posizione viene calcolata per la tua app approssimativamente ogni 10 minuti, ma l'app viene risvegliata solo ogni 30-60 minuti con alcuni dati sulla posizione disponibili come aggiornamento collettivo. Questo approccio consente di compensare la latenza con una maggiore disponibilità di dati e un miglioramento delle prestazioni della batteria.

Aggiornamenti frequenti e con elevata precisione mentre l'utente interagisce con altre app

Esempio: un'app di navigazione o fitness che continua a funzionare quando l'utente disattiva lo schermo o apre un'altra app.

Utilizza un servizio in primo piano. Se la tua app potrebbe eseguire operazioni costose per conto dell'utente, è consigliabile informarlo. Un servizio in primo piano richiede una notifica persistente. Per ulteriori informazioni, consulta la Panoramica delle notifiche.