Samodzielne i niesamodzielne aplikacje na Wear OS

Zalecamy, aby aplikacje na Wear OS działały niezależnie od telefonu, aby użytkownicy mogli wykonywać zadania na zegarku bez dostępu do telefonu z Androidem lub iOS. Jeśli aplikacja na zegarek wymaga użycia telefonu, oznacz aplikację na Wear OS jako niesamodzielną aplikację i zadbaj o to, aby użytkownik miał dostęp do aplikacji Telefon.

Planowanie aplikacji

Dzięki Android App Bundle możesz automatycznie generować zoptymalizowane pakiety Android Package Kit (APK) dla konfiguracji urządzenia każdego użytkownika w ramach tej samej strony aplikacji. Dzięki temu użytkownicy będą mogli pobierać tylko kod i zasoby potrzebne do uruchomienia Twojej aplikacji.

Informacje o konfigurowaniu aplikacji do dystrybucji w Sklepie Google Play znajdziesz w artykule na temat pakowania i dystrybucji aplikacji na Wear OS oraz przewodnika dla początkujących użytkowników pakietów Android App Bundle.

Ogólnie minimalny poziom interfejsu API aplikacji na Wear OS to poziom API 25 (Wear OS 2.0). Docelowy poziom interfejsu API musi być na poziomie 28 lub wyższym. Więcej informacji znajdziesz w artykule Spełnianie wymagań Google Play dotyczących docelowego poziomu interfejsu API. Ustaw targetSdkVersion interfejsu API na poziomie 30 (Wear OS 3), aby mieć pewność, że aplikacja będzie dobrze działać na najnowszej wersji platformy.

Informacje o żądaniach sieciowych i dostępie do sieci o dużej przepustowości znajdziesz w artykule Dostęp do sieci i synchronizacja w Wear OS.

Definiowanie aplikacji jako aplikacji na Wear OS

Tag <uses-feature> musisz zdefiniować w pliku manifestu aplikacji na Androida. Aby wskazać, że jest to aplikacja na zegarek, dodaj wpis podobny do tego:

  <manifest>
  ...
  <uses-feature android:name="android.hardware.type.watch" />
  ...
  </manifest>
  

Określanie aplikacji jako samodzielnej lub jako samodzielnej

Aplikacja na zegarek jest uważana za samodzielną lub niesamodzielną aplikację:

  • Samodzielna: zupełnie niezależna aplikacja, która nie wymaga aplikacji na telefon do obsługi podstawowych funkcji, w tym uwierzytelniania. Aplikacja na telefon udostępnia tylko opcjonalne funkcje, jeśli są dostępne.
  • Niesamodzielna: aplikacja zależna, która do działania podstawowych funkcji, w tym uwierzytelniania, wymaga zainstalowania aplikacji na telefonie lub innym urządzeniu.

W aplikacji na Wear OS ustaw wartość elementu meta-data com.google.android.wearable.standalone w pliku manifestu Androida, aby określić, czy jest to aplikacja samodzielna czy samodzielna.

Jeśli aplikacja na zegarek jest całkowicie niezależną, samodzielną aplikacją, wskaż Sklep Google Play, ustawiając wartość com.google.android.wearable.standalone na true:

<application>
...
  <meta-data
    android:name="com.google.android.wearable.standalone"
    android:value="true" />
...
</application>

Jeśli aplikacja na zegarek nie jest samodzielną aplikacją, której podstawowe funkcje działają z inną aplikacją, ustaw wartość com.google.android.wearable.standalone na false. Oznacza to, że aplikacja na zegarek wymaga innego urządzenia, ale nie ma wpływu na promocję aplikacji w Sklepie Google Play.

Uwaga: nawet jeśli wartość com.google.android.wearable.standalone to false, aplikację na zegarek można zainstalować przed instalacją telefonu. Jeśli więc aplikacja na zegarek wykryje, że na telefonie towarzyszącym nie ma wymaganej aplikacji do obsługi telefonu (zgodnie z opisem na tej stronie), poproś użytkownika o jej zainstalowanie.

Udostępniony kod i miejsce na dane

Kod może być udostępniany między aplikacją na Wear OS a aplikacją na telefon. Na przykład wspólny kod sieci może znajdować się w zasobach wspólnych.

Opcjonalnie kod specyficzny dla danego formatu może się znaleźć w osobnym module.

Możesz przechowywać dane lokalnie, używając standardowych interfejsów API pamięci Androida (podobnie jak na telefonie). Możesz na przykład użyć interfejsów SharedPreferences lub biblioteki trwałości Room.

Wykrywanie aplikacji na innym urządzeniu

Aplikacja na zegarek i powiązana z nią aplikacja na telefon mogą wykrywać, czy druga aplikacja jest dostępna.

Aplikacje na telefon i zegarek mogą używać interfejsu CapabilityClient, aby informować o swoim obecności na sparowanym urządzeniu. Mogą to robić statycznie lub dynamicznie.

Gdy aplikacja znajduje się w węźle w sieci Wear OS użytkownika, np. na telefonie, sparowanym zegarku lub w chmurze, CapabilityClient umożliwia innym aplikacjom jej wykrycie. Więcej informacji znajdziesz w artykule o możliwościach reklamowania.

Jeśli jedna z aplikacji nie wykrywa drugiej, możesz poprosić użytkownika o otwarcie strony aplikacji w Sklepie Play na urządzeniu, którego dotyczy problem. Jest to rozwiązanie w przypadku aplikacji na zegarek, które do prawidłowego działania wymagają obecności aplikacji towarzyszącej na telefonie.

Musisz sprawdzić, czy Sklep Play jest dostępny na urządzeniu, ponieważ nie wszystkie telefony (np. iPhone) obsługują Sklep Play.

W tych sekcjach znajdziesz opis sprawdzonych metod dla 2 scenariuszy:

  • Samodzielna aplikacja na zegarek wymaga aplikacji na telefon.
  • Aplikacja na telefon wymaga samodzielnej aplikacji na zegarek.

Możesz też zapoznać się z przykładową aplikacją na GitHubie, która demonstruje tę funkcję. Więcej informacji o klasach opisanych w kolejnej sekcji znajdziesz w dokumentacji interfejsu Wear OS API. Ten plik zawiera też informacje o klasie PhoneTypeHelper, która zawiera metodę getPhoneDeviceType(), która umożliwia aplikacji na Wear OS sprawdzenie, czy telefon towarzyszący jest urządzeniem z Androidem czy iOS.

Podaj nazwy funkcji wykrywania aplikacji

W przypadku aplikacji odpowiadającej każdemu typowi urządzenia (zegarka lub telefonu) podaj w pliku res/values/wear.xml unikalny ciąg znaków dla nazwy funkcji.

Na przykład w module mobilnym plik wear.xml może zawierać:

<resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@array/android_wear_capabilities">
    <string-array name="android_wear_capabilities">
        <item>verify_remote_example_phone_app</item>
    </string-array>
</resources>

W module Wear OS plik wear.xml zawiera inną wartość nazwy możliwości, na przykład:

<resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@array/android_wear_capabilities">
    <string-array name="android_wear_capabilities">
        <item>verify_remote_example_wear_app</item>
    </string-array>
</resources>

Więcej informacji znajdziesz w artykule o możliwościach reklamowania.

Wykrywanie aplikacji i otwieranie adresu URL z poziomu zegarka

Aplikacja na zegarek może wykryć, czy na telefonie towarzyszącym użytkownika jest zainstalowana aplikacja Telefon. Wykonaj te czynności:

  1. CapabilityClient umożliwia sprawdzenie, czy aplikacja Telefon jest zainstalowana na sparowanym telefonie. Więcej informacji znajdziesz w przykładowej aplikacji na GitHubie.
  2. Jeśli na telefonie nie masz zainstalowanej aplikacji Telefon, użyj metody PhoneDeviceType.getPhoneDeviceType(), aby sprawdzić typ telefonu. Szczegółowe informacje znajdziesz w sekcji poniżej.
  3. Jeśli zostanie zwrócona wartość PhoneDeviceType.DEVICE_TYPE_ANDROID, będzie to telefon z Androidem. Zadzwoń na numer RemoteActivityHelper.startRemoteActivity() na urządzeniu z Wear OS, aby otworzyć Sklep Play na telefonie. Użyj identyfikatora URI rynku aplikacji na telefon. Może on być inny niż identyfikator URI aplikacji na Wear. Na przykład użyj identyfikatora URI rynku, takiego jak: market://details?id=com.example.android.wearable.wear.finddevices.
  4. Jeśli zwrócony zostanie PhoneDeviceType.DEVICE_TYPE_IOS, będzie to telefon z iOS bez Sklepu Play. Otwórz App Store na iPhonie, dzwoniąc pod numer RemoteActivityHelper.startRemoteActivity() na urządzeniu z Wear OS. Możesz podać URL aplikacji w iTunes, np. https://itunes.apple.com/us/app/yourappname.

    W Wear OS nie można automatycznie określić, czy aplikacja Telefon jest zainstalowana na urządzeniu z iOS. Sprawdzoną metodą jest udostępnienie użytkownikowi mechanizmu ręcznego aktywowania App Store.

Uwaga: użyj wcześniej opisanego interfejsu API RemoteActivityHelper, aby określić, że dowolny adres URL może być otwierany na telefonie z poziomu zegarka i nie jest wymagana żadna aplikacja do obsługi telefonu.

Szczegóły dotyczące wykrywania typu sparowanego telefonu

Oto fragment kodu korzystający z metody getPhoneDeviceType() do sprawdzania typu telefonu, z którym jest sparowany zegarek:

Kotlin

var phoneDeviceType: Int = PhoneDeviceType.getPhoneDeviceType(context)

Java

int phoneDeviceType = PhoneDeviceType.getPhoneDeviceType(context);

Wartość zwracana przez metodę getPhoneDeviceType() jest jedną z tych wartości:

Zwracana wartość Description
DEVICE_TYPE_ANDROID Powiązany telefon to urządzenie z Androidem.
DEVICE_TYPE_IOS Telefon towarzyszący to urządzenie z iOS.
DEVICE_TYPE_UNKNOWN Telefon towarzyszący jest nieznanym urządzeniem.
DEVICE_TYPE_ERROR Podczas określania typu sparowanego telefonu wystąpił błąd. Kolejne sprawdzenie należy sprawdzić później.

Wykrywanie aplikacji od telefonu z Androidem

Telefon z Androidem może wykryć, czy na urządzeniach z Wear OS użytkownika zainstalowana jest aplikacja na zegarek. Wykonaj te czynności:

  1. Za pomocą właściwości NodeClient znajdź wszystkie zegarki połączone z telefonem użytkownika. Więcej informacji znajdziesz w przykładowej aplikacji na GitHubie.
  2. Za pomocą CapabilityClient sprawdź, na których zegarkach użytkownika jest zainstalowana Twoja aplikacja.
  3. Jeśli Twoja aplikacja nie jest zainstalowana na wszystkich zegarkach użytkownika, zezwól użytkownikowi na otwieranie Sklepu Play na pozostałych urządzeniach z Wear OS, korzystając z metody RemoteActivityHelper.startRemoteActivity(). Użyj identyfikatora URI rynku dla aplikacji na Wear OS. Może on być inny niż identyfikator URI aplikacji na telefon. Na przykład użyj identyfikatora URI rynku, takiego jak: market://details?id=com.example.android.wearable.wear.finddevices.

Dane o lokalizacji w przypadku zegarków sparowanych z iPhone'ami

W przypadku zegarków sparowanych z iPhone'ami skorzystaj z usługi Fused Location Provider (FLP), by pobierać dane o lokalizacji z zegarka. Więcej informacji znajdziesz w artykule o wykrywaniu lokalizacji na Wear OS.

Jeśli telefon towarzyszący jest dostępny, FLP używa telefonu towarzyszącego do uzyskiwania danych o lokalizacji.

Uzyskiwanie tylko niezbędnych danych

Ogólnie rzecz biorąc, aby uzyskać dane z internetu, należy uzyskać tylko niezbędne informacje. W przeciwnym razie mogą wystąpić niepotrzebne opóźnienia, wykorzystanie pamięci i wykorzystanie baterii.

Gdy zegarek jest połączony przez Bluetooth LE, aplikacja może mieć dostęp do przepustowości tylko 4 kilobajtów na sekundę, w zależności od zegarka. Dlatego zalecamy wykonanie tych czynności:

  • Kontroluj żądania sieciowe i odpowiedzi pod kątem dodatkowych danych, które są potrzebne tylko przez aplikację na telefon.
  • Zmniejsz duże obrazy przed przesłaniem ich przez sieć na zegarek.

Informacje o sytuacjach, w których potrzebna jest sieć o dużej przepustowości, znajdziesz w sekcji Dostęp do sieci o dużej przepustowości.

Dodatkowe przykłady kodu

Przykład WesVerifyRemoteApp ilustruje użycie interfejsów API omówionych na tej stronie.