Android предоставляет встроенную поддержку Bluetooth с низким энергопотреблением (BLE) в качестве центрального устройства и предоставляет API, которые приложения могут использовать для обнаружения устройств, запроса сервисов и передачи информации.
Вот несколько примеров:
- Передача небольших объемов данных между устройствами поблизости.
- Взаимодействие с датчиками расстояния, чтобы предоставлять пользователям персонализированный контент на основе их текущего местоположения.
В отличие от классического Bluetooth, BLE потребляет значительно меньше энергии. Это позволяет приложениям взаимодействовать с устройствами BLE, у которых более строгие требования к питанию, например с датчиками расстояния, пульсометрами и фитнес-устройствами.
Внимание! Когда пользователь подключает свое устройство к другому устройству по технологии BLE, данные, передаваемые между ними, доступны всем приложениям на устройстве пользователя.
Поэтому, если ваше приложение собирает конфиденциальные данные, вы должны реализовать безопасность на уровне приложения, чтобы защитить конфиденциальность этих данных.
Основные сведения
Чтобы устройства с поддержкой BLE могли передавать данные между собой, они должны сначала сформировать канал связи. Чтобы использовать API Bluetooth LE, необходимо объявить несколько разрешений в файле манифеста. После того как приложение получит разрешение на использование Bluetooth, ему потребуется доступ к BluetoothAdapter, чтобы определить, доступен ли Bluetooth на устройстве. Если Bluetooth доступен, устройство выполнит поиск устройств BLE поблизости.
После того как устройство найдено, его возможности определяются путем подключения к серверу GATT на устройстве BLE.
После подключения данные могут передаваться на подключенное устройство в зависимости от доступных сервисов и характеристик.
Основные термины и понятия
Ниже приведены основные термины и понятия, связанные с BLE.
- Общий профиль атрибутов (GATT)
- Профиль GATT – это общая спецификация для отправки и получения коротких фрагментов данных, известных как "атрибуты", по каналу BLE. Все текущие профили приложений BLE основаны на GATT. Дополнительную информацию можно найти в примере Android BluetoothLeGatt на GitHub.
- Профили
- Bluetooth SIG определяет множество профилей для устройств BLE. Профиль – это спецификация, определяющая, как устройство работает в определенном приложении. Обратите внимание, что устройство может поддерживать несколько профилей. Например, устройство может содержать пульсометр и детектор уровня заряда батареи.
- Протокол атрибутов (ATT)
- GATT основан на протоколе атрибутов (ATT). Это также называется GATT/ATT. Протокол ATT оптимизирован для работы на устройствах BLE. Для этого он использует как можно меньше байтов. Каждый атрибут имеет уникальный идентификатор (UUID) – стандартизированный 128-битный формат строкового идентификатора, используемый для уникальной идентификации информации. Атрибуты, передаваемые по ATT, форматируются как характеристики и сервисы.
- Характеристика
- Характеристика содержит одно значение и от 0 до n дескрипторов, которые описывают значение характеристики. Характеристику можно рассматривать как тип, аналогичный классу.
- Дескриптор
- Дескрипторы – это определенные атрибуты, которые описывают значение характеристики. Например, дескриптор может содержать человекочитаемое описание, допустимый диапазон значений характеристики или единицу измерения, относящуюся к значению характеристики.
- Сервис
- Сервис – это набор характеристик. Например, у вас может быть сервис "Монитор сердечного ритма", который включает такие характеристики, как "измерение частоты сердечных сокращений". Список существующих профилей и сервисов на основе GATT можно найти на сайте bluetooth.org.
Роли и обязанности
Когда устройство взаимодействует с устройством BLE, роли и обязанности делятся двумя разными способами:
Центральный и периферийный. Это относится к самому соединению BLE: устройство в центральной роли сканирует, ищет рекламу, а устройство в периферийной роли рекламирует. Два устройства, которые поддерживают только роль периферийного устройства, не могут взаимодействовать друг с другом, как и два устройства, которые поддерживают только роль центрального устройства.
Сервер GATT и клиент GATT. Это определяет, как два устройства общаются друг с другом после того, как они установили соединение. Устройство в роли клиента отправляет запросы на получение данных, а устройство в роли сервера выполняет их.
Чтобы понять разницу между ролями "центральное устройство – периферийное устройство" и "сервер – клиент", рассмотрим пример, в котором у вас есть телефон Android и трекер физической активности с поддержкой BLE, передающий данные датчиков на телефон.
Телефон – центральное устройство – активно ищет устройства BLE. Трекер физической активности – периферийное устройство – объявляет о себе и ожидает запроса на подключение.
После того как телефон и трекер физической активности установят соединение, они начнут передавать друг другу метаданные GATT. В этом случае приложение, запущенное на телефоне, отправляет запросы на получение данных, то есть действует как клиент GATT. Трекер физической активности выполняет эти запросы, поэтому он действует как сервер GATT.
В альтернативном варианте дизайна приложения телефон может играть роль сервера GATT. Подробнее: BluetoothGattServer.