Wykrywanie lokalizacji na Wear OS

Niewielki, dobrze widoczny format zegarka sprawia, że Wear OS stanowi idealną platformę dla aplikacji, które rejestrują i raportują lokalizację użytkownika oraz na nie reagują. Możesz na przykład tworzyć aplikacje, które w czasie rzeczywistym przekazują użytkownikom aktualne informacje o odległości, szybkości i kierunku ruchu lub przekazują czytelne wskazówki na temat otoczenia.

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 lokalizacyjne bez konieczności podłączenia telefonu. Gdy prosisz o dostęp do danych o lokalizacji w aplikacji na zegarek, system pobiera lokalizację z telefonu lub zegarka przy użyciu najbardziej energooszczędnej metody. Dzięki temu nawet bez czujnika GPS w zegarku możesz uzyskać informacje o lokalizacji.

Aby zmniejszyć wpływ pozyskiwania danych o lokalizacji na czas pracy na baterii, wywołaj setPriority(), podając wartość PRIORITY_BALANCED_POWER_ACCURACY. Różne ustawienia priorytetu mogą w różny sposób optymalizować elementy.

Jeśli to możliwe, oszczędzaj baterię, pytając o lokalizację nie częściej niż raz na minutę za pomocą setInterval().

Jak opisujemy w kolejnych sekcjach, aplikacja musi poradzić sobie z utratą danych o lokalizacji, gdy zegarek bez czujnika zostanie rozłączony z telefonem.

Wybierz metodę

Możesz przekazać dane o lokalizacji do aplikacji na Wear OS na kilka sposobów. Możesz skorzystać z usług dostawcy uśrednionej lokalizacji (FLP) lub Wear Health Services (WHS). FLP to interfejs API Usług Google Play.

Używaj FLP w następujących przypadkach:

  • Chcesz, aby dane o lokalizacji były zbierane na bieżąco, ale nie w sposób ciągły – na przykład oznaczać lokalizację zaparkowanego samochodu.
  • Chcesz mieć ciągłą lokalizację, ale nie potrzebujesz historii lokalizacji.

Używaj WHS w następujących sytuacjach:

  • Chcesz otrzymywać w przyszłości dane z innych czujników lub też dane pochodzące z innych czujników.
  • Twoja aplikacja jest aplikacją do treningu lub ćwiczeń, która musi śledzić dane o lokalizacji w określonym przedziale czasu.

Informacje o zegarkach sparowanych z iPhone'ami znajdziesz w sekcji Dane o lokalizacji w przypadku zegarków sparowanych z iPhone'ami.

Użyj dostawcy uśrednionej lokalizacji

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

Informacje o przesyłaniu próśb o aktualizację lokalizacji i ciągłym śledzeniu lokalizacji użytkownika znajdziesz w artykule Wysyłanie prośby o aktualizację lokalizacji.

Wykrywanie wbudowanego modułu GPS

Jeśli użytkownik wybierze bieganie z zegarkiem bez wbudowanego czujnika GPS, który zostawi w domu sparowany telefon, aplikacja na zegarek nie będzie mogła pobrać z niego danych o lokalizacji. Wykryj taką sytuację w aplikacji i ostrzegj użytkownika, że funkcje związane z lokalizacją są niedostępne.

Aby określić, czy zegarek ma wbudowany czujnik GPS, wywołaj metodę hasSystemFeature() za pomocą metody PackageManager.FEATURE_LOCATION_GPS. Ten kod wykrywa, czy zegarek ma wbudowany czujnik GPS, gdy zaczynasz aktywność.

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);
}

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 wymaga stałego strumienia danych, musi wykryć utratę połączenia, ostrzegać użytkownika i delikatnie obniżyć jego funkcjonalność.

Podobnie jak w przypadku urządzenia mobilnego, gdy prosisz o aktualizację lokalizacji za pomocą FusedLocationProviderClient.requestLocationUpdates(), musisz przekazać LocationCallback lub PendingIntent. Oba te rodzaje danych obejmują informacje o lokalizacji i stan LocationAvailability.

Jeśli korzystasz z opcji LocationCallback, zastąp onLocationAvailability(), aby otrzymywać informacje o stanie dostępności lokalizacji.

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

Nie znaleziono lokalizacji nicków

W przypadku utraty sygnału GPS możesz pobrać ostatnią znaną lokalizację zegarka użytkownika. Odzyskanie ostatniej znanej lokalizacji jest przydatne, gdy nie można naprawić GPS lub gdy zegarek nie ma wbudowanego GPS-a i traci połączenie z telefonem. Więcej informacji znajdziesz w sekcji Uzyskiwanie ostatniej znanej lokalizacji.

Czyszczenie lokalizacji z wywołaniami grupowymi

Jeśli korzystasz z połączeń grupowych, wywołaj metodę flushLocations() po wznowieniu ekranu lub powrocie z trybu nieaktywnego, aby natychmiast zwrócić wszystkie zbiorcze lokalizacje do wszystkich zarejestrowanych lokalizacji LocationListeners, LocationCallbacks i Pending Intents.