Bluetooth с низким энергопотреблением

Bluetooth с низким энергопотреблением (BLE), доступный в Android 4.3 и более поздних версиях, создает короткие соединения между устройствами для передачи пакетов данных. Когда устройство не подключено, BLE остается в режиме сна. Это позволяет BLE обеспечивать более низкую пропускную способность и сниженное энергопотребление по сравнению с классическим Bluetooth. BLE идеально подходит для таких приложений, как пульсометр или беспроводная клавиатура. Чтобы использовать BLE, устройства должны иметь чипсет, поддерживающий BLE.

Реализация

Все текущие профили приложений BLE основаны на профиле Generic Attribute (GATT). Когда устройство Android взаимодействует с устройством BLE, устройство, которое отправляет информацию, является сервером, а устройство, которое получает информацию, является клиентом. В Android есть API для разработчиков, работающие с BLE, в том числе API для взаимодействия между серверами и клиентами GATT. Чтобы использовать все возможности BLE API, реализуйте требования к интерфейсу HCI Bluetooth в Android.

Режимы устройства

При использовании BLE устройство на базе Android может выступать в качестве периферийного устройства, центрального устройства или того и другого. В периферийном режиме устройства могут отправлять рекламные пакеты. В центральном режиме устройства могут сканировать объявления. Устройство Android, выступающее в роли периферийного и центрального устройства, может обмениваться данными с другими периферийными устройствами BLE, отправляя объявления в периферийном режиме. Устройства с поддержкой Bluetooth 4.1 и более ранних версий могут использовать BLE только в центральном режиме. Чипсеты некоторых старых устройств могут не поддерживать периферийный режим BLE.

Поиск устройств с поддержкой BLE

Устройство Android может более эффективно находить определенные устройства Bluetooth и сканировать их, если использует BLE. BLE API позволяют разработчикам приложений создавать фильтры для поиска устройств с меньшим участием хост-контроллера.

Сканирование местоположения

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

  1. Выберите Настройки > Безопасность и местоположение > Местоположение.
  2. Убедитесь, что переключатель "Местоположение" находится в положении Вкл.
  3. Выберите Режим.
  4. Выберите режим Высокая точность или Экономия заряда батареи.

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

В Android 12 и более поздних версиях разрешения BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE, и BLUETOOTH_CONNECT позволяют приложениям сканировать устройства поблизости, не запрашивая разрешение на доступ к данным о местоположении. Подробнее о разрешениях Bluetooth…

Пользователи могут отключить фоновый поиск Bluetooth-устройств на уровне системы, выбрав Настройки > Защита и местоположение > Местоположение > Сканирование и переведя переключатель Поиск Bluetooth-устройств в положение "Выкл.". Это не повлияет на сканирование BLE для определения местоположения или поиска локальных устройств.

Как фильтровать результаты сканирования

В Android 6.0 и более поздних версий сканирование BLE и сопоставление фильтров выполняется на контроллере Bluetooth. Устройство может фильтровать результаты сканирования и сообщать о событиях found и lost, связанных с устройствами BLE, процессору приложений (AP). Фильтрация также работает при пакетном сканировании, что позволяет экономить энергию, поскольку устройство переносит сканирование BLE на встроенное ПО. Пакетное сканирование позволяет точке доступа реже выходить из спящего режима из-за сканирования BLE для поиска устройств или маячков.

Функция OnFound/OnLost реализована в контроллере Bluetooth и протестирована, чтобы убедиться, что устройства BLE не пропускаются при сканировании. Это позволяет экономить заряд батареи, а также дает следующие преимущества:

  • При событии OnFound основной процессор приложений пробуждается при обнаружении определенного устройства.
  • При событии OnLost ТД активируется, когда не удается найти определенное устройство.
  • Приложения фреймворка получают меньше нежелательных уведомлений, когда поблизости есть устройство в зоне действия.
  • Непрерывное сканирование позволяет приложениям фреймворка получать уведомления, когда устройство находится вне зоны действия.

Фильтр сканирования может быть основан на обнаружении объявлений устройства (событие OnFound). На уровне Java можно задать такие параметры, как first discovery (первое обнаружение) или указанное количество объявлений с момента первого обнаружения. Реализуйте фильтрацию BLE с помощью команды HCI Advertising Packet Content Filter.