Rileva la posizione su Wear OS

Il fattore di forma piccolo e facilmente consultabile di uno smartwatch rende Wear OS una piattaforma ideale per le app che registrano, segnalano e rispondono alla posizione dell'utente. Ad esempio, puoi creare app che forniscono agli utenti aggiornamenti in tempo reale su distanza, velocità e direzione o fornire indicazioni rapide sull'ambiente circostante.

Per maggiori informazioni, vedi Creare app con conoscenza della posizione.

Alcuni smartwatch hanno un sensore GPS integrato che recupera i dati sulla posizione senza richiedere uno smartphone connesso. Quando richiedi i dati sulla posizione in un'app per lo smartwatch, il sistema recupera la posizione dallo smartphone o dallo smartwatch utilizzando il metodo più efficiente dal punto di vista energetico. Pertanto, anche senza un sensore GPS nell'orologio, puoi ottenere informazioni sulla posizione.

Per ridurre l'effetto dell'acquisizione dei dati sulla posizione sulla durata della batteria, chiama setPriority() con il valore PRIORITY_BALANCED_POWER_ACCURACY. Impostazioni di priorità diverse potrebbero ottimizzare i chip in modo diverso.

Se possibile, risparmia batteria chiedendo la posizione non più di una volta al minuto utilizzando setInterval().

Come descritto nelle sezioni successive, l'app deve gestire la perdita dei dati di geolocalizzazione quando uno smartwatch senza sensore si disconnette da uno smartphone.

Scegliere un metodo

Esistono due modi per fornire dati sulla posizione a un'app Wear OS. Puoi utilizzare il Fused Location Provider (FLP) o Wear Health Services (WHS). FLP è un'API di Google Play Services.

Utilizza FLP nelle seguenti circostanze:

  • Vuoi dati sulla posizione in un determinato momento, ma non in modo continuo, ad esempio per contrassegnare la posizione di un'auto parcheggiata.
  • Vuoi la posizione continua, ma non hai bisogno della cronologia delle posizioni.

Utilizza WHS nelle seguenti circostanze:

  • Vuoi dati di altri sensori o è probabile che tu voglia dati di altri sensori in futuro.
  • La tua app è un'app di allenamento o attività fisica che deve monitorare i dati sulla posizione nell'arco di un intervallo di tempo specifico.

Utilizzare il Fused Location Provider

Su uno smartwatch, ottieni i dati sulla posizione utilizzando FusedLocationProviderClient. L'FLP potrebbe utilizzare i dati sulla posizione dello smartphone. Per saperne di più, vedi Creare un client di servizi di localizzazione.

Per informazioni su come richiedere aggiornamenti della posizione e monitorare continuamente la posizione di un utente, consulta Richiedere aggiornamenti della posizione.

Rilevare il GPS integrato

Se un utente va a fare jogging con uno smartwatch privo di sensore GPS integrato e lascia lo smartphone accoppiato, l'app per smartwatch non può ottenere dati sulla posizione tramite il dispositivo connesso. Rileva questa situazione nella tua app e avvisa l'utente che le funzionalità di localizzazione non sono disponibili.

Per determinare se uno smartwatch ha un sensore GPS integrato, chiama il metodo hasSystemFeature() con PackageManager.FEATURE_LOCATION_GPS. Il seguente codice rileva se lo smartwatch ha un sensore GPS integrato quando avvii un'attività:

class LocationActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // ...
    }
    fun hasGps(): Boolean =
        packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)
}

Gestire gli eventi di disconnessione

Se uno smartwatch non ha un sensore GPS integrato e perde la connessione a uno smartphone, lo smartwatch perde il flusso di dati sulla posizione. Se la tua app prevede un flusso costante di dati, deve rilevare la perdita di una connessione, avvisare l'utente e ridurre in modo controllato la funzionalità.

Come per un dispositivo mobile, quando richiedi aggiornamenti della posizione utilizzando FusedLocationProviderClient.requestLocationUpdates(), devi inserire un LocationCallback o un PendingIntent. Entrambi includono le informazioni sulla posizione e lo stato LocationAvailability.

Quando utilizzi l'opzione LocationCallback, esegui l'override di onLocationAvailability() per ricevere aggiornamenti sullo stato di disponibilità della posizione.

Quando utilizzi l'opzione PendingIntent e viene restituito un Intent, estrai lo stato di disponibilità della posizione da Intent utilizzando il metodo LocationAvailability.extractLocationAvailability(Intent).

Posizione dell'handle non trovata

Quando il segnale GPS viene perso, puoi recuperare l'ultima posizione nota dello smartwatch dell'utente. Il recupero dell'ultima posizione nota è utile quando non è possibile ottenere una correzione GPS e quando lo smartwatch non dispone di GPS integrato e perde la connessione con lo smartphone. Per saperne di più, vedi Ottenere l'ultima posizione nota.

Svuotare la posizione con chiamate batch

Se utilizzi chiamate batch, chiama flushLocations() quando lo schermo si riaccende o torna dalla modalità Ambient per restituire immediatamente tutte le posizioni batch a tutti i LocationListeners, LocationCallbacks e Pending Intents registrati.