Wykrywanie lokalizacji na Wear OS

Mały, łatwy do odczytania format zegarka sprawia, że Wear OS to idealna platforma dla aplikacji, które rejestrują, raportują i reagują na lokalizację użytkownika. Możesz na przykład tworzyć aplikacje, które dostarczają użytkownikom aktualizacje w czasie rzeczywistym dotyczące odległości, prędkości i kierunku, lub wyświetlać szybkie wskazówki dotyczące otoczenia użytkownika.

Więcej informacji znajdziesz w artykule Tworzenie aplikacji korzystających z danych o lokalizacji.

Niektóre zegarki mają wbudowany czujnik GPS, który pobiera dane o lokalizacji bez konieczności łączenia się z telefonem. Gdy aplikacja na zegarek poprosi o dane o lokalizacji, system pobierze je z telefonu lub zegarka, korzystając z najbardziej energooszczędnej metody. Dlatego nawet bez czujnika GPS w zegarku możesz uzyskać informacje o lokalizacji.

Aby zmniejszyć wpływ pozyskiwania danych o lokalizacji na czas pracy baterii, wywołaj funkcję setPriority() z wartością PRIORITY_BALANCED_POWER_ACCURACY. Różne ustawienia priorytetu mogą optymalizować działanie chipów w inny sposób.

W miarę możliwości oszczędzaj baterię, prosząc o lokalizację nie częściej niż raz na minutę za pomocą funkcji setInterval().

Jak opisano w dalszych sekcjach, aplikacja musi obsługiwać utratę danych o lokalizacji, gdy zegarek bez czujnika zostanie odłączony od telefonu.

Wybierz metodę

Dane o lokalizacji możesz przekazywać do aplikacji na Wear OS na 2 sposoby: za pomocą usługi lokalizacji łączonej (FLP) lub usług zdrowotnych na Wear (WHS). FLP to interfejs API usług Google Play.

Używaj FLP w tych sytuacjach:

  • Chcesz mieć dane o lokalizacji w danym momencie, ale nie w sposób ciągły, np. aby oznaczyć lokalizację zaparkowanego samochodu.
  • Chcesz mieć ciągły dostęp do lokalizacji, ale nie potrzebujesz historii lokalizacji.

Używaj WHS w tych sytuacjach:

  • Chcesz korzystać z danych z innych czujników lub prawdopodobnie będziesz ich potrzebować w przyszłości.
  • Twoja aplikacja służy do śledzenia treningów lub ćwiczeń i musi śledzić dane o lokalizacji w określonym przedziale czasu.

Korzystanie z dostawcy uśrednionej lokalizacji

Na zegarku możesz pobierać dane o lokalizacji za pomocą interfejsu FusedLocationProviderClient. Usługa FLP może używać danych o lokalizacji z telefonu. Więcej informacji znajdziesz w artykule Tworzenie klienta usług lokalizacyjnych.

Informacje o żądaniu aktualizacji lokalizacji i ciągłym śledzeniu lokalizacji użytkownika znajdziesz w artykule Żądanie aktualizacji lokalizacji.

Wykrywanie wbudowanego GPS-a

Jeśli użytkownik idzie pobiegać z zegarkiem, który nie ma wbudowanego czujnika GPS, i zostawia sparowany telefon w domu, aplikacja na zegarku nie może pobierać danych o lokalizacji z połączonego urządzenia. Wykryj tę sytuację w aplikacji i ostrzeż użytkownika, że funkcje lokalizacji są niedostępne.

Aby sprawdzić, czy zegarek ma wbudowany czujnik GPS, wywołaj metodę hasSystemFeature() z parametrem PackageManager.FEATURE_LOCATION_GPS. Poniższy kod wykrywa, czy zegarek ma wbudowany czujnik GPS, gdy rozpoczynasz aktywność:

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

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

Obsługa zdarzeń odłączenia

Jeśli zegarek nie ma wbudowanego czujnika GPS i utraci połączenie z telefonem, utraci strumień danych o lokalizacji. Jeśli aplikacja oczekuje stałego strumienia danych, musi wykrywać utratę połączenia, ostrzegać użytkownika i łagodnie ograniczać funkcjonalność.

Podobnie jak w przypadku urządzenia mobilnego, gdy prosisz o aktualizacje lokalizacji za pomocą wywołania FusedLocationProviderClient.requestLocationUpdates(), przekazujesz LocationCallback lub PendingIntent. Oba zawierają informacje o lokalizacji i stan LocationAvailability.

Jeśli używasz opcji LocationCallback, zastąp onLocationAvailability(), aby otrzymywać aktualizacje dotyczące stanu dostępności lokalizacji.

Jeśli używasz opcji PendingIntent i zwracana jest wartość Intent, wyodrębnij stan dostępności lokalizacji z elementu Intent za pomocą metody LocationAvailability.extractLocationAvailability(Intent).

Nie znaleziono lokalizacji nicka

Gdy sygnał GPS zostanie utracony, możesz pobrać ostatnią znaną lokalizację zegarka użytkownika. Pobieranie ostatniej znanej lokalizacji jest przydatne, gdy nie możesz uzyskać sygnału GPS, a zegarek nie ma wbudowanego GPS-u i traci połączenie z telefonem. Więcej informacji znajdziesz w artykule Pobieranie ostatniej znanej lokalizacji.

Wysyłanie lokalizacji w pakietach wywołań

Jeśli używasz wywołań pakietowych, wywołaj flushLocations(), gdy ekran się włączy lub gdy urządzenie wyjdzie z trybu otoczenia, aby natychmiast zwrócić wszystkie lokalizacje pakietowe do wszystkich zarejestrowanych urządzeń LocationListeners, LocationCallbacksPending Intents.