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.