Общайтесь напрямую по сети на автономных устройствах.

Благодаря Wear OS от Google, часы могут напрямую взаимодействовать с сетью, без доступа к телефону на Android или iOS. Не используйте API уровня данных для подключения приложения Wear OS к сети. Вместо этого следуйте инструкциям и шагам, описанным в этом руководстве.

доступ к сети

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

В случае недоступности телефона используются сети Wi-Fi и сотовая связь, в зависимости от аппаратной части часов. Платформа Wear OS обрабатывает переходы между сетями.

Вы можете использовать такие протоколы, как HTTP, TCP и UDP. Однако API-интерфейсы android.webkit , включая класс CookieManager , недоступны. Вы можете использовать файлы cookie, считывая и записывая заголовки запросов и ответов.

Используйте WorkManager для асинхронных запросов, включая опрос через регулярные интервалы.

Если вам необходимо подключиться к определенным типам сетей, см. раздел «Чтение состояния сети» .

Высокоскоростной сетевой доступ

Платформа Wear OS управляет сетевым подключением с целью обеспечения наилучшего пользовательского опыта. Платформа выбирает активную сеть по умолчанию, балансируя две потребности: длительное время автономной работы и пропускную способность сети.

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

В этом разделе приведены рекомендации по использованию класса ConnectivityManager , которые помогут обеспечить вашему приложению необходимую пропускную способность сети. Общую информацию о более точном управлении сетевыми ресурсами см. в разделе «Управление использованием сети» .

Запросить подключение к Wi-Fi

Для сценариев использования, требующих высокоскоростного доступа к сети, таких как передача больших файлов или потоковая передача мультимедиа, запрашивайте подключение через высокоскоростной канал связи, например, Wi-Fi. Это показано в следующем примере:

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network)
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        // Called when a network disconnects or otherwise no longer satisfies this request
        // or callback.
    }
}

fun requestWifiNetwork() {
    connectivityManager.requestNetwork(
        NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
    )
}

Подключение к сети может происходить не мгновенно, поскольку Wi-Fi или сотовая связь часов могут быть отключены для экономии заряда батареи. Если часы не могут подключиться к сети, метод onAvailable() вашего экземпляра NetworkCallback не вызывается.

После вызова метода onAvailable() устройство пытается оставаться подключенным к сети Wi-Fi до тех пор, пока не будет освобожден NetworkCallback . Для экономии заряда батареи освобождайте обратный вызов, как показано в следующем примере, когда вам больше не нужна сеть Wi-Fi.

connectivityManager.bindProcessToNetwork(null)
connectivityManager.unregisterNetworkCallback(callback)

Запустите окно настроек Wi-Fi.

При запросе сети Wi-Fi система пытается подключиться к сохраненной сети, если таковая настроена и находится в зоне действия. Если сохраненная сеть Wi-Fi недоступна, метод обратного вызова onAvailable вашего экземпляра NetworkCallback не вызывается.

Если вы используете Handler для истечения времени ожидания запроса к сети, вы можете предложить пользователю добавить сеть Wi-Fi по истечении этого времени. Отправьте пользователя непосредственно к действию для добавления сети Wi-Fi, используя следующий интент:

val networkSettingsAction = "com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"
val intent = Intent(networkSettingsAction).apply {
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
context.startActivity(intent)

Для запуска окна настроек ваше приложение должно иметь разрешение CHANGE_WIFI_STATE .

Вопросы пользовательского интерфейса

Если для работы приложения с высокой пропускной способностью требуется подключение к новой сети Wi-Fi, необходимо обеспечить его бесперебойное подключение и при необходимости освободить доступ. Если сеть Wi-Fi недоступна, объясните, что для работы функции требуется Wi-Fi, и предоставьте возможность запуска действия настроек Wi-Fi. Не блокируйте пользователю доступ к функциям приложения, не требующим подключения к высокоскоростной сети.

Вопросы использования электроэнергии и данных

Чтобы продлить срок службы батареи и минимизировать использование мобильных данных, отложите выполнение любых некритических сетевых задач, таких как составление аналитических отчетов или сбор журналов, до тех пор, пока устройство Wear OS не восстановит соединение Bluetooth или Wi-Fi вместо соединения LTE или лимитированного соединения.

Облачный обмен сообщениями

Для отправки уведомлений используйте Firebase Cloud Messaging (FCM) напрямую.

В Wear OS отсутствуют API для доступа к сети или FCM. Обратитесь к существующей документации по подключению к сети и обмену сообщениями в облаке .

FCM хорошо работает с Doze и является рекомендуемым способом отправки уведомлений на часы.

Для получения сообщений от FCM соберите регистрационный токен для устройства при запуске вашего приложения Wear OS. Затем включите этот токен в состав получателя, когда ваш сервер будет отправлять сообщения на REST-конечную точку FCM. FCM отправляет сообщения на устройство, идентифицированное токеном.

Сообщение FCM имеет формат JSON (JavaScript Object Notation) и может содержать один или оба из следующих компонентов:

  • Содержимое уведомления: когда часы получают данные уведомления, они отображаются пользователю непосредственно в ленте уведомлений. Когда пользователь нажимает на уведомление, запускается ваше приложение.
  • Полезная нагрузка данных: когда полезная нагрузка содержит набор пользовательских пар ключ-значение. Полезная нагрузка передается в виде данных в ваше приложение Wear OS.

Для получения дополнительной информации и примеров полезной нагрузки см. раздел «Типы сообщений» .

По умолчанию уведомления передаются между приложением на телефоне и часами. Если у вас есть отдельное приложение Wear OS и соответствующее приложение на телефоне, могут возникать дублирующие уведомления. Например, одно и то же уведомление от FCM, полученное как на телефоне, так и на часах, может отображаться на обоих устройствах независимо друг от друга. Этого можно избежать, используя API-интерфейсы для передачи уведомлений .

Используйте фоновые службы

Для обеспечения корректного выполнения фоновых задач необходимо учитывать режимы Doze и App Standby.

Когда экран выключается или переходит в режим ожидания на достаточно долгое время, может сработать часть режима Doze, и фоновые задачи могут быть отложены на определенные периоды. Позже, когда устройство находится в неподвижном состоянии в течение длительного времени, срабатывает обычный режим Doze. Планируйте запросы с помощью API WorkManager , который позволяет вашему приложению регистрироваться для безопасного выполнения кода в режиме Doze.

Расписание с ограничениями

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

  • Запланируйте запрос, требующий подключения к сети.

    Укажите, является ли NetworkType CONNECTED или UNMETERED . UNMETERED используется для больших объемов передачи данных, а CONNECTED — для небольших.

  • Запланируйте запрос во время зарядки.

  • Запланируйте запрос на время простоя устройства. Это полезно для фоновых задач с низким приоритетом или для синхронизации, особенно во время зарядки устройства.

Для получения более подробной информации ознакомьтесь с руководством WorkManager «Влияние ограничений на периодические работы» .