Bluetooth с низким энергопотреблением
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Android обеспечивает центральную встроенную поддержку платформы Bluetooth Low Energy (BLE) и предоставляет API-интерфейсы, которые приложения могут использовать для обнаружения устройств, запроса услуг и передачи информации.
Общие случаи использования включают следующее:
- Передача небольших объемов данных между соседними устройствами.
- Взаимодействие с датчиками приближения, чтобы предоставить пользователям индивидуальный подход в зависимости от их текущего местоположения.
В отличие от классического Bluetooth , BLE рассчитан на значительно более низкое энергопотребление. Это позволяет приложениям взаимодействовать с устройствами BLE, которые имеют более строгие требования к питанию, такими как датчики приближения, мониторы сердечного ритма и фитнес-устройства.
Внимание: когда пользователь соединяет свое устройство с другим устройством с помощью BLE, данные, передаваемые между двумя устройствами, доступны всем приложениям на устройстве пользователя.
По этой причине, если ваше приложение собирает конфиденциальные данные, вам следует реализовать безопасность на уровне приложения, чтобы защитить конфиденциальность этих данных.
Основы
Чтобы устройства с поддержкой BLE могли передавать данные между собой, они должны сначала сформировать канал связи. Для использования API-интерфейсов Bluetooth LE необходимо объявить несколько разрешений в файле манифеста. Как только ваше приложение получит разрешение на использование Bluetooth, вашему приложению потребуется доступ к BluetoothAdapter
и определить, доступен ли Bluetooth на устройстве. Если Bluetooth доступен, устройство выполнит поиск ближайших устройств BLE . Как только устройство найдено, возможности устройства BLE обнаруживаются путем подключения к серверу GATT на устройстве BLE . После установления соединения данные могут передаваться с помощью подключенного устройства в зависимости от доступных услуг и характеристик.
Ключевые термины и понятия
Ниже приводится краткое изложение ключевых терминов и понятий BLE:
- Общий профиль атрибутов (GATT)
- Профиль GATT — это общая спецификация для отправки и получения коротких фрагментов данных, известных как «атрибуты», по ссылке BLE. Все текущие профили приложений BLE основаны на GATT. Чтобы узнать больше, просмотрите образец Android BluetoothLeGatt на GitHub.
- Профили
- Bluetooth SIG определяет множество профилей для устройств BLE. Профиль — это спецификация того, как устройство работает в конкретном приложении. Обратите внимание, что устройство может реализовать более одного профиля. Например, устройство может содержать монитор сердечного ритма и детектор уровня заряда батареи.
- Протокол атрибутов (ATT)
- ГАТТ построен на основе протокола атрибутов (АТТ). Это также называется ГАТТ/АТТ. ATT оптимизирован для работы на устройствах BLE. С этой целью он использует как можно меньше байтов. Каждый атрибут уникально идентифицируется универсальным уникальным идентификатором (UUID), который представляет собой стандартизированный 128-битный формат строкового идентификатора, используемый для уникальной идентификации информации. Атрибуты, передаваемые ATT, форматируются как характеристики и услуги .
- Характеристика
- Характеристика содержит одно значение и 0-n дескрипторов, описывающих значение характеристики. Характеристику можно рассматривать как тип, аналогичный классу.
- Дескриптор
- Дескрипторы — это определенные атрибуты, описывающие значение характеристики. Например, дескриптор может указывать удобочитаемое описание, приемлемый диапазон значения характеристики или единицу измерения, специфичную для значения характеристики.
- Услуга
- Услуга представляет собой совокупность характеристик. Например, у вас может быть служба под названием «Монитор сердечного ритма», которая включает в себя такие функции, как «измерение сердечного ритма». Список существующих профилей и услуг на основе GATT можно найти на сайте bluetooth.org .
Роли и обязанности
Когда устройство взаимодействует с устройством BLE, роли и обязанности делятся двумя разными способами:
Центральное и периферическое. Это относится к самому соединению BLE — устройство в центральной роли сканирует в поисках рекламы, а устройство в периферийной роли размещает рекламу. Два устройства, поддерживающие только периферийную роль, не могут взаимодействовать друг с другом, как и два устройства, поддерживающие только центральную роль.
Сервер GATT и клиент GATT. Это определяет, как два устройства общаются друг с другом после установления соединения. Устройство в роли клиента отправляет запросы на данные, а устройство в роли сервера их выполняет.
Чтобы понять разницу между разделением ролей центрально-периферийное устройство и сервер-клиент, рассмотрим пример, где у вас есть телефон Android и трекер активности с поддержкой BLE, который передает данные датчиков обратно на телефон.
Телефон — центральное устройство — активно сканирует устройства BLE. Трекер активности — периферийное устройство — объявляет о себе и ожидает получения запроса на соединение.
После того как телефон и трекер активности установили соединение, они начинают передавать друг другу метаданные GATT. В этом случае приложение, работающее на телефоне, отправляет запросы на данные, поэтому оно действует как клиент GATT . Трекер активности выполняет эти запросы, поэтому он действует как сервер GATT .
Альтернативный дизайн приложения может включать в себя телефон, выполняющий роль сервера GATT. См. BluetoothGattServer
для получения дополнительной информации.
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-07-29 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-07-29 UTC."],[],[],null,["# Bluetooth Low Energy\n\nAndroid provides built-in platform support for Bluetooth Low Energy (BLE) in the\ncentral role and provides APIs that apps can use to discover devices, query for\nservices, and transmit information.\n\nCommon use cases include the following:\n\n- Transferring small amounts of data between nearby devices.\n- Interacting with proximity sensors to give users a customized experience based on their current location.\n\nIn contrast to [classic Bluetooth](/develop/connectivity/bluetooth),\nBLE is designed for significantly lower power consumption. This allows apps to\ncommunicate with BLE devices that have stricter power requirements, such as\nproximity sensors, heart rate monitors, and fitness devices. \n\n**Caution:** When a user pairs their device with another device\nusing BLE, the data that's communicated between the two devices is\naccessible to **all** apps on the user's device.\n\n\nFor this reason, if your app captures sensitive data, you should implement\napp-layer security to protect the privacy of that data.\n\nThe basics\n----------\n\nFor BLE-enabled devices to transmit data between each other, they must first\nform a channel of communication. Use of the Bluetooth LE APIs requires you to\n[declare several permissions](/develop/connectivity/bluetooth/bt-permissions)\nin your manifest file. Once your app has permission to use Bluetooth, your app\nneeds to access the `BluetoothAdapter` and\n[determine if Bluetooth is available on the device](/develop/connectivity/bluetooth/setup)\nIf Bluetooth is available, the device will\n[scan for nearby BLE devices](/develop/connectivity/bluetooth/ble/find-ble-devices).\nOnce a device is found, the capabilities of the BLE device are discovered by\n[connecting to the GATT server on the BLE device](/develop/connectivity/bluetooth/ble/connect-gatt-server).\nOnce a connection is made,\n[data can be transferred with the connected device](/develop/connectivity/bluetooth/ble/transfer-ble-data)\nbased on the available services and characteristics.\n\nKey terms and concepts\n----------------------\n\nThe following is a summary of key BLE terms and concepts:\n\n-\n\n **Generic Attribute Profile (GATT)**\n : The GATT profile is a general specification for sending and receiving short\n pieces of data known as \"attributes\" over a BLE link. All current BLE\n application profiles are based on GATT. Review the [Android BluetoothLeGatt\n sample](https://github.com/android/platform-samples/tree/main/samples/connectivity/bluetooth/ble/src/main/java/com/example/platform/connectivity/bluetooth/ble)\n on GitHub to learn more.\n-\n\n **Profiles**\n : The **Bluetooth SIG** defines many\n [profiles](https://www.bluetooth.org/en-us/specification/adopted-specifications)\n for BLE devices. A profile is a specification for how a device works in a\n particular application. Note that a device can implement more than one\n profile. For example, a device could contain a heart rate monitor and a\n battery level detector.\n-\n\n **Attribute Protocol (ATT)**\n : GATT is built on top of the Attribute Protocol (ATT). This is also referred to\n as GATT/ATT. ATT is optimized to run on BLE devices. To this end, it uses as\n few bytes as possible. Each attribute is uniquely identified by a Universally\n Unique Identifier (UUID), which is a standardized 128-bit format for a string\n ID used to uniquely identify information. The *attributes* transported by ATT\n are formatted as *characteristics* and *services*.\n-\n\n **Characteristic**\n : A characteristic contains a single value and 0-n descriptors that describe the\n characteristic's value. A characteristic can be thought of as a type,\n analogous to a class.\n-\n\n **Descriptor**\n : Descriptors are defined attributes that describe a characteristic value. For\n example, a descriptor might specify a human-readable description, an\n acceptable range for a characteristic's value, or a unit of measure that is\n specific to a characteristic's value.\n-\n\n **Service**\n : A service is a collection of characteristics. For example, you could have a\n service called \"Heart Rate Monitor\" that includes characteristics such as\n \"heart rate measurement.\" You can find a list of existing GATT-based profiles\n and services on [bluetooth.org](https://www.bluetooth.org/en-us/specification/adopted-specifications).\n\n### Roles and responsibilities\n\nWhen a device interacts with a BLE device, roles and responsibilities are\ndivided in two different ways:\n\n- **Central versus peripheral.** This applies to the BLE connection itself---the\n device in the central role scans, looking for advertisement, and the device in\n the peripheral role advertises. Two devices that only support the peripheral\n role can't talk to each other, and neither can two devices that only support\n the central role.\n\n- **GATT server versus GATT client.** This determines how the two devices talk\n to each other after they've established the connection. The device in the\n client role sends requests for data, and the device in the server role\n fulfills them.\n\nTo understand the distinction between the central-peripheral and server-client\nrole divisions, consider an example where you have an Android phone and a\nBLE-enabled activity tracker that reports sensor data back to the phone.\n\n- The phone---the *central* device---actively scans for BLE devices. The activity\n tracker---the *peripheral* device---advertises and waits to receive a request for\n connection.\n\n- After the phone and the activity tracker have established a connection, they\n start transferring GATT metadata to each other. In this case, the app running\n on the phone sends requests for data, so it acts as the *GATT client* . The\n activity tracker fulfills those requests, so it acts as the *GATT server*.\n\nAn alternative design of the app might involve the phone playing the GATT server\nrole instead. See\n[`BluetoothGattServer`](/reference/android/bluetooth/BluetoothGattServer) for\nmore information."]]