Bluetooth Low Energy
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
O Android oferece suporte integrado à plataforma para Bluetooth de baixa energia (BLE) na
função central e APIs que os apps podem usar para descobrir dispositivos, consultar
serviços e transmitir informações.
Alguns casos de uso comuns são:
- Transferência de pequenas quantidades de dados entre dispositivos próximos.
- Interação com sensores de proximidade para oferecer aos usuários uma experiência personalizada com base
na localização atual deles.
Em comparação com o Bluetooth clássico,
o BLE foi projetado para um consumo de energia significativamente menor. Isso permite que os apps
se comuniquem com dispositivos BLE que tenham requisitos de energia mais rígidos, como
sensores de proximidade, monitores de frequência cardíaca e dispositivos de fitness.
Atenção:quando um usuário pareia dispositivos por meio do BLE, os dados comunicados entre os dois aparelhos ficam acessíveis para todos os apps no dispositivo do usuário.
Por esse motivo, se o app capturar dados sensíveis, implemente
a segurança na camada do app para proteger a privacidade desses dados.
Noções básicas
Para que dispositivos com BLE transmitam dados entre si, eles precisam primeiro
formar um canal de comunicação. O uso das APIs Bluetooth LE exige que você
declare várias permissões
no arquivo de manifesto. Quando o app tiver permissão para usar o Bluetooth, ele
precisará acessar o BluetoothAdapter
e
determinar se o Bluetooth está disponível no dispositivo.
Se o Bluetooth estiver disponível, o dispositivo vai
procurar dispositivos BLE próximos.
Depois que um dispositivo é encontrado, os recursos dele são descobertos
fazendo a conexão com o servidor GATT no dispositivo BLE.
Depois que uma conexão é estabelecida,
os dados podem ser transferidos com o dispositivo conectado
com base nos serviços e nas características disponíveis.
Principais termos e conceitos
Confira a seguir um resumo dos principais termos e conceitos do BLE:
- Perfil de atributo genérico (GATT)
- O perfil GATT é uma especificação geral para envio e recebimento de pequenas
quantidades de dados conhecidos como "atributos" por um link BLE. Todos os perfis de aplicativo BLE atuais são baseados em GATT. Confira o exemplo
do Android BluetoothLeGatt
no GitHub para saber mais.
- Perfis
- O Bluetooth SIG define muitos
perfis
para dispositivos BLE. O perfil é uma especificação de como um dispositivo funciona em um
aplicativo específico. Um dispositivo pode implementar mais de um
perfil. Por exemplo, um dispositivo pode conter um monitor de frequência cardíaca e um
detector de nível de bateria.
- Protocolo de atributo (ATT)
- O GATT foi criado com base no Protocolo de atributo (ATT). Ele também é chamado de
GATT/ATT. O ATT é otimizado para operar em dispositivos BLE. Para isso, ele usa o mínimo possível de bytes. Cada atributo é identificado exclusivamente por um Identificador universalmente
único (UUID), um formato padronizado de 128 bits para um ID
de string usado para identificar unicamente informações. Os atributos transportados pelo ATT
são formatados como características e serviços.
- Característica
- Uma característica contém um valor único e descritores 0-n para descrever o
valor dela. Ela pode ser considerada como um tipo,
semelhante a uma classe.
- Descritor
Os descritores - são atributos definidos que descrevem um valor de característica. Por
exemplo, um descritor pode especificar uma descrição legível, um
intervalo aceitável para o valor de uma característica ou uma unidade de medida
específica a esse valor.
- Serviço
- Um serviço é um conjunto de características. Por exemplo, você pode ter um
serviço chamado "Monitor de frequência cardíaca" que inclui características como
"medição da frequência cardíaca". É possível encontrar uma lista de perfis e serviços
com base em GATT em bluetooth.org.
Papéis e responsabilidades
Quando um dispositivo interage com um dispositivo BLE, os papéis e as responsabilidades são
divididos de duas maneiras diferentes:
Central x periférico. Isso se aplica à própria conexão BLE: o
dispositivo na função central faz a verificação do anúncio e o dispositivo na
função periférica anuncia. Dois dispositivos que oferecem suporte apenas para o papel
periférico não podem se comunicar entre si. Assim como dois dispositivos que só oferecem suporte
ao papel central, não podem.
Servidor GATT x cliente GATT. Isso determina como os dois dispositivos
se comunicam depois de estabelecer a conexão. O dispositivo na
função de cliente envia solicitações de dados, e o dispositivo na função de servidor
as atende.
Para entender a diferença entre as divisões de função central-periférica e servidor-cliente, considere um exemplo em que você tem um smartphone Android e um rastreador de atividades habilitado para BLE que informa os dados do sensor de volta ao smartphone.
O smartphone, o dispositivo central, procura ativamente dispositivos BLE. O rastreador de atividades, o dispositivo periférico, divulga e aguarda uma solicitação de conexão.
Depois que o smartphone e o rastreador de atividades estabelecerem uma conexão, eles
vão começar a transferir metadados GATT um para o outro. Nesse caso, o app em execução
no smartphone envia solicitações de dados, atuando como o cliente GATT. O rastreador de atividades atende a essas solicitações e atua como o servidor GATT.
Um design alternativo do app pode envolver o smartphone que desempenha o papel de
servidor GATT. Consulte
BluetoothGattServer
para
mais informações.
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-27 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-07-27 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."]]