Rileva la posizione su Wear OS

Wear OS è la piattaforma ideale per le app che registrano, registrano e rispondono alla posizione dell'utente, grazie al fattore di forma ridotto e visibile di ogni orologio. Ad esempio, puoi creare app che forniscono agli utenti aggiornamenti in tempo reale su distanza, velocità e direzione o che forniscono indizi rapidi sull'ambiente circostante.

Per ulteriori informazioni, vedi Creare app che rilevano la posizione.

Alcuni orologi sono dotati di un sensore GPS integrato che recupera i dati sulla posizione senza richiedere un telefono connesso. Quando richiedi dati sulla posizione in un'app dell'orologio, il sistema recupera la posizione dallo smartphone o dall'orologio utilizzando il metodo più efficiente dal punto di vista energetico. In questo modo, anche senza un sensore GPS nello smartwatch, puoi comunque 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 tramite setInterval().

Come descritto nelle sezioni seguenti, la tua app deve gestire la perdita dei dati sulla posizione quando un orologio senza sensore viene disconnesso da uno smartphone.

Scegli il metodo

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

Utilizza FLP nelle seguenti circostanze:

  • Vuoi che i dati sulla posizione siano istantanei, ma non continui, ad esempio contrassegnando la posizione di un'auto parcheggiata.
  • Vuoi che la posizione sia costante, 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 per esercizi o allenamenti che deve monitorare i dati sulla posizione nel corso di un intervallo di tempo specifico.

Per gli orologi accoppiati con iPhone, consulta Dati sulla posizione per orologi accoppiati con iPhone.

Utilizzare Fused Location Provider

Su uno smartwatch, trova i dati sulla posizione usando il FusedLocationProviderClient. Il FLP potrebbe usare i dati sulla posizione del telefono. Per ulteriori informazioni, consulta Creare un client dei servizi di geolocalizzazione.

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

Rileva GPS integrato

Se un utente fa jogging con un orologio privo di sensore GPS integrato e lascia a casa lo smartphone accoppiato, l'app dell'orologio non può recuperare i dati sulla posizione attraverso il dispositivo connesso. Rileva questa situazione nell'app e avvisa l'utente che le funzionalità di geolocalizzazione non sono disponibili.

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

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)

    if (!hasGps()) {
        Log.d(TAG, "This hardware doesn't have GPS.")
        // Fall back to functionality that doesn't use location or
        // warn the user that location function isn't available.
    }
}

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

Java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    if (!hasGps()) {
        Log.d(TAG, "This hardware doesn't have GPS.");
        // Fall back to functionality that doesn't use location or
        // warn the user that location function isn't available.
    }
    ...
}

private boolean hasGps() {
    return getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
}

Gestire gli eventi di disconnessione

Se uno smartwatch non è dotato di sensore GPS integrato e si disconnette con uno smartphone, lo smartwatch perde il flusso di dati sulla posizione. Se prevede un flusso di dati costante, l'app deve rilevare la perdita di connessione, avvisare l'utente e ridurre gradualmente la funzionalità.

Come con un dispositivo mobile, quando richiedi aggiornamenti di posizione utilizzando FusedLocationProviderClient.requestLocationUpdates(), trasmetti 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à nelle località.

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

Posizione dell'handle non trovata

Quando il segnale GPS viene perso, è possibile recuperare l'ultima posizione nota dello smartwatch dell'utente. Il recupero dell'ultima posizione nota è utile quando non è possibile ottenere un segnale GPS e quando lo smartwatch non dispone del GPS integrato e perde la connessione con il telefono. Per maggiori informazioni, consulta Ottenere l'ultima posizione nota.

Elimina località con chiamate raggruppate

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

  • Nota: il testo del link viene visualizzato quando JavaScript è disattivato
  • Attività in corso