Как общаться напрямую через сеть на отдельных устройствах

Устройства Wear OS от Google могут подключаться к сети напрямую, без доступа к телефону Android или iOS. Не используйте Data Layer 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, используя следующий intent:

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

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

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

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

Сообщение FCM имеет формат JSON и может содержать одну или обе из следующих полезных нагрузок:

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

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

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

Использовать фоновые сервисы

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

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

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

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

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

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

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

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

Подробнее о том, как ограничения влияют на периодические задачи…