Отдельные и не отдельные приложения Wear OS

Мы рекомендуем создавать приложения для Wear OS, которые работают независимо от телефона, чтобы пользователи могли выполнять задачи на часах без доступа к телефону Android или iOS. Если для работы приложения на часах требуется взаимодействие с телефоном, отметьте приложение для Wear OS как неавтономное и убедитесь, что у пользователя есть приложение для телефона.

Планирование приложения

Вы можете использовать наборы Android App Bundle, чтобы автоматически создавать оптимизированные пакеты Android (APK) для каждой конфигурации устройства пользователя в рамках одной страницы приложения. Это позволяет пользователям скачивать только код и ресурсы, необходимые для запуска приложения.

Информацию о том, как подготовить приложение к публикации в Google Play, можно найти в статьях Как упаковать и распространять приложения для Wear OS и Как начать работу с пакетами приложений Android.

Для новых приложений целевой уровень API должен быть не ниже 34. Подробнее о том, как обеспечить соответствие приложения требованиям Google Play к целевому уровню API… Если вы выберете последний доступный уровень API, ваше приложение будет хорошо работать на текущих версиях платформы.

Информацию о сетевых запросах и доступе к сети с высокой пропускной способностью можно найти в статье Доступ к сети и синхронизация на устройствах Wear OS.

Как определить приложение как приложение для Wear OS

В файле манифеста Android для приложения необходимо определить тег <uses-feature>. Чтобы указать, что это приложение для часов, добавьте запись, как показано ниже:

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

Как определить, является ли приложение самостоятельным

Приложения для часов бывают двух типов:

  • Автономное – полностью независимое приложение, для работы основных функций которого не требуется приложение для телефона. Хотя уведомления "Открыть на телефоне" допустимы, приложение должно предоставлять пользователям альтернативные способы выполнения функций, например короткую ссылку или QR-код, без необходимости подключать телефон.
  • Неавтономное – зависимое приложение, для работы основных функций которого требуется приложение на телефоне или другом устройстве. Этот вариант подходит для приложений, в которых сложно реализовать альтернативный способ выполнения основной функции, например аутентификации, с помощью QR-кода или короткой ссылки.

Примечание. Даже если приложение неавтономное, пользователи могут установить его версию для Wear OS раньше, чем мобильную. Поэтому, если приложение для Wear OS обнаружит, что на находящемся рядом мобильном устройстве нет нужного сопутствующего приложения, предложите пользователю установить его.

Google проверяет точность статуса приложения во время показа. Это значение влияет на видимость приложений в Google Play на устройствах, не подключенных к телефону, например на часах Wear OS. Приложения, которые не являются самостоятельными, а также те, которые разработчики ошибочно обозначили как самостоятельные, будут недоступны пользователям на таких устройствах.

В приложении Wear OS задайте значение элемента meta-data com.google.android.wearable.standalone в файле манифеста Android, чтобы указать, является ли приложение самостоятельным или нет.

Если приложение для часов является полностью независимым, укажите это в Google Play, задав для элемента com.google.android.wearable.standalone значение true:

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

Если приложение для часов неавтономное и для работы основных функций ему требуется другое приложение, задайте для параметра com.google.android.wearable.standalone значение false. Это означает, что для работы приложения для часов требуется другое устройство, но не влияет на продвижение приложения в Google Play.

Примечание. Даже если значение com.google.android.wearable.standalone – false, приложение для часов можно установить до приложения для телефона. Поэтому, если приложение для часов обнаружит, что на сопутствующем телефоне нет нужного приложения, как описано на этой странице, предложите пользователю установить его.

Общее хранилище кода и данных

Код можно использовать как в приложении для Wear OS, так и в приложении для телефона. Например, общий код для работы с сетью может находиться в общей библиотеке.

При необходимости код, относящийся к определенному форм-фактору, можно поместить в отдельный модуль.

Для локального хранения данных можно использовать стандартные API хранилища Android, как на телефоне. Для хранения пар "ключ-значение" и типизированных объектов можно использовать DataStore или библиотеку постоянного хранения Room.

Как обнаружить приложение на другом устройстве

Приложение для часов и связанное с ним приложение для телефона могут определять, доступно ли другое приложение.

Приложения для телефона и часов могут использовать CapabilityClient, чтобы сообщать о своем присутствии на подключенном устройстве. Это можно сделать статически или динамически.

Когда приложение находится на узле сети Wear OS пользователя, например на телефоне, подключенных часах или в облаке, CapabilityClient позволяет другим приложениям обнаружить его. Подробнее о возможностях рекламы…

Если одно из ваших приложений не может обнаружить другое, вы можете предложить пользователю открыть страницу приложения в Google Play на нужном устройстве. Это решение для приложений на часах, которым для корректной работы требуется наличие сопутствующего приложения на телефоне.

Убедитесь, что на устройстве есть Google Play, поскольку этот магазин приложений поддерживается не всеми телефонами, например iPhone.

Ниже приведены рекомендации для двух сценариев:

  • Ваше автономное приложение для часов требует наличия приложения для телефона.
  • Приложению для телефона требуется автономное приложение для часов.

Вы также можете ознакомиться с примером вспомогательных функций для слоя данных, в котором показано, как использовать библиотеки вспомогательных функций для слоя данных, входящие в состав Horologist. Эти помощники позволяют отслеживать подключение между портативным устройством и устройством Wear OS. Подробную информацию о классах, описанных в следующем разделе, можно найти в справочнике по Wear OS API. В этом справочнике также есть информация о классе PhoneTypeHelper, который содержит метод getPhoneDeviceType(), позволяющий приложению для Wear OS проверить, какое устройство используется в качестве сопутствующего: Android или iOS-устройство.

Как указать названия возможностей для обнаружения приложений

Для приложения, соответствующего каждому типу устройства (часам или телефону), укажите уникальную строку для названия функции в файле res/values/wear.xml.

Например, в файле wear.xml мобильного модуля может быть следующее:

<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>

В файле wear.xml модуля Wear OS указано другое название функции, например:

<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>

Подробнее о возможностях рекламы…

Обнаружение приложений и открытие URL на часах

Приложение для часов может определить, установлено ли на связанном телефоне ваше приложение для телефона. Для этого выполните следующие действия:

  1. Используйте значок CapabilityClient, чтобы проверить, установлено ли приложение "Телефон" на подключенном телефоне. Дополнительную информацию можно найти в примере вспомогательных функций для слоя данных на GitHub.
  2. Если на телефоне не установлено приложение "Телефон", используйте метод PhoneDeviceType.getPhoneDeviceType(), чтобы проверить тип телефона. Подробная информация приведена в следующем разделе.
  3. Если возвращается значение PhoneDeviceType.DEVICE_TYPE_ANDROID, то телефон работает на Android. Вызовите функцию Call RemoteActivityHelper.startRemoteActivity() на устройстве Wear OS, чтобы открыть Google Play на телефоне. Используйте URI магазина приложений для телефона, который может отличаться от URI приложения для Wear. Например, используйте URI магазина, такой как: market://details?id=com.example.android.wearable.wear.finddevices.
  4. Если возвращается значение PhoneDeviceType.DEVICE_TYPE_IOS, то это телефон iOS, на котором нет Google Play. Откройте App Store на iPhone, нажав RemoteActivityHelper.startRemoteActivity() на устройстве Wear OS. Вы можете указать URL приложения в iTunes, например https://itunes.apple.com/us/app/yourappname.

    В Wear OS нельзя программно определить, установлено ли приложение для телефона на iOS-устройстве. Рекомендуем добавить в приложение возможность вручную открыть страницу приложения в магазине.

Примечание. Используйте API RemoteActivityHelper, как описано в предыдущем разделе, чтобы указать, что любой URL должен открываться на телефоне с часов и что приложение для телефона не требуется.

Сведения для определения типа подключенного телефона

Ниже приведен фрагмент кода, в котором метод getPhoneDeviceType() используется для проверки типа телефона, с которым сопряжены часы:

var phoneDeviceType: Int = PhoneTypeHelper.getPhoneDeviceType(this)

Метод getPhoneDeviceType() возвращает одно из следующих значений:

Возвращаемое значение Описание
DEVICE_TYPE_ANDROID Второй телефон работает на Android.
DEVICE_TYPE_IOS Сопутствующий телефон работает на iOS.
DEVICE_TYPE_UNKNOWN Вспомогательный телефон – неизвестное устройство.
DEVICE_TYPE_ERROR При определении типа подключенного телефона произошла ошибка. Повторите попытку позже.

Как начать распознавание приложений на телефоне Android

Ваш телефон Android может определить, установлено ли ваше приложение для часов на устройствах Wear OS пользователя. Для этого выполните следующие действия:

  1. С помощью NodeClient найдите все часы, подключенные к телефону пользователя. Дополнительную информацию можно найти в примере вспомогательных функций для слоя данных на GitHub.
  2. С помощью CapabilityClient проверьте, на каких часах пользователя установлено ваше приложение.
  3. Если приложение не установлено на всех часах пользователя, предложите ему открыть Google Play на оставшихся устройствах Wear OS с телефона, используя метод RemoteActivityHelper.startRemoteActivity(). Используйте URI приложения для Wear OS, который может отличаться от URI приложения для телефона. Например, используйте URI рынка, такой как: market://details?id=com.example.android.wearable.wear.finddevices.

Данные о местоположении часов, подключенных к iPhone

Если часы подключены к iPhone, для получения геоданных на часах используйте поставщика геоданных из нескольких источников (FLP). Подробнее о том, как определить местоположение на устройстве Wear OS…

Если сопутствующий телефон доступен, FLP использует его для получения данных о местоположении.

Получайте только необходимые данные

Как правило, при получении данных из интернета следует запрашивать только необходимые данные. В противном случае вы можете столкнуться с ненужной задержкой, расходом памяти и заряда батареи.

Когда часы подключены по Bluetooth LE, приложение может иметь доступ к пропускной способности всего 4 КБ/с в зависимости от часов. Поэтому рекомендуется выполнить следующие действия:

  • Проверьте запросы и ответы сети на наличие дополнительных данных, которые нужны только для приложения на телефоне.
  • Сжимайте большие изображения, прежде чем отправлять их на часы по сети.

Если вам нужна сеть с высокой пропускной способностью, ознакомьтесь с разделом Доступ к сети с высокой пропускной способностью.

Дополнительные примеры кода

В примере вспомогательных функций для слоя данных показано, как использовать API, описанные на этой странице.