Общайтесь в фоновом режиме

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

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

На следующей диаграмме показано упрощенное представление руководства на этой странице:

Найти устройство

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

На заднем плане

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

Подключиться к устройству

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

После того, как у вас есть экземпляр BluetoothDevice , вы можете запустить запрос на подключение к соответствующему устройству, вызвав один из методов connectGatt() . Значение, которое вы передаете в логическое значение autoConnect определяет, какой из следующих двух режимов подключения использует клиент GATT:

  • Прямое подключение ( autoconnect = false ): попробуйте подключиться к периферийному устройству напрямую. Если устройство недоступно, произойдет сбой. В случае отключения клиент GATT не пытается автоматически повторно подключиться.
  • Автоматическое подключение ( autoconnect = true ): попробуйте автоматически подключиться к периферийному устройству, когда оно доступно. В случае отключения, инициированного периферийным устройством, или если периферийное устройство находится вне зоны действия, клиент GATT автоматически пытается повторно подключиться, когда периферийное устройство становится доступным.

На заднем плане

Нет ограничений на подключение к устройству, пока приложение находится в фоновом режиме, хотя соединение закрывается, если ваш процесс завершается. Кроме того, существуют ограничения на запуск действий (в Android 10 и выше) или служб переднего плана (в Android 12 и выше) из фона.

Таким образом, для выполнения соединения в фоновом режиме приложения могут использовать следующие решения:

Оставайтесь на связи с устройством

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

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

При переключении между приложениями

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

При прослушивании периферийных уведомлений

Чтобы прослушивать периферийные уведомления, приложение должно вызывать setCharacteristicNotification() , прослушивать обратные вызовы с помощью onCharacteristicChanged() и поддерживать соединение. Для большинства приложений лучше всего поддерживать этот вариант использования с помощью CompanionDeviceService , поскольку приложению, скорее всего, придется продолжать прослушивание в течение длительного периода времени. Однако вы также можете использовать службу переднего плана.

В любом случае вы можете повторно подключиться после завершения процесса, следуя инструкциям в разделе «Подключение к устройству» .