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

Благодаря 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.
    }
}
connectivityManager.requestNetwork(
    NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
    callback
)

Ява

ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
    public void onAvailable(Network network) {
        super.onAvailable(network);
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network);
    }

    public void onLost(Network network) {
        super.onLost(network);
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
};
connectivityManager.requestNetwork(
        new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
);

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

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

Котлин

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

Ява

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

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

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

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

Котлин

context.startActivity(Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"))

Ява

context.startActivity(new Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"));

Чтобы запустить действие настроек, ваше приложение должно иметь разрешение CHANGE_WIFI_STATE .

Рекомендации по пользовательскому интерфейсу

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

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

Загрузка музыки

Рис. 1. Схема загрузки музыки в музыкальном приложении.

Рекомендации по использованию энергии и данных

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

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

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

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

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

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

Сообщение FCM имеет формат нотации объектов JavaScript (JSON) и может включать в себя одну или обе следующие полезные нагрузки:

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

Дополнительные сведения и примеры полезных данных см. в разделе О сообщениях FCM .

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

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

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

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

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

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

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

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

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

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

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