Bluetooth Low Energy (BLE) je standard bežične komunikacije optimizovan za prenos malih količina podataka uz minimalnu potrošnju energije. Prema Bluetooth SIG, 2025, tehnologija se koristi u više od 5 milijardi uređaja širom sveta. GATT (Generic Attribute Profile) organizuje podatke u hijerarhiju Service → Characteristic → Descriptor, koja je osnova svih BLE aplikacija za iOS i Android.
Ključne tačke
Bluetooth Low Energy (BLE) radi po modelu klijent-server sa dve uloge: Central (mobilni uređaj) i Peripheral (uređaj). Central skenira vazduh i pokreće vezu, dok Peripheral prenosi podatke. Za razliku od klasičnog Bluetooth-a, BLE nije namenjen za audio tokove — njegov zadatak je prenos malih paketa uz minimalnu potrošnju energije. Prema Bluetooth SIG Core Specification 5.4 (2025), BLE podržava brzinu do 2 Mbps uz struju manju od 15 mA u aktivnom režimu.
GATT (Generic Attribute Profile) definiše strukturu podataka Bluetooth Low Energy. Service je logička grupa karakteristika (na primer, Heart Rate Service 0x180D). Characteristic je tačka podataka sa konkretnom vrednošću. Descriptor su metapodaci karakteristike, uključujući CCCD za upravljanje obaveštenjima. Svaki element ima UUID — 16-bitni za standardne Bluetooth SIG profile ili 128-bitni za prilagođene.
Bluetooth Low Energy u mobilnim aplikacijama koristi ovu hijerarhiju za organizovanje razmene podataka između pametnog telefona i periferije. Pravilno razumevanje GATT-a je osnova razvoja BLE aplikacija na obe platforme. Programer mora znati UUID-ove servisa i karakteristika uređaja, kao i svojstva svake karakteristike (read, write, notify, indicate).
BLE uređaji prenose reklamne pakete (advertising packets) za otkrivanje. Advertising Data sadrži ime uređaja, UUID-ove servisa, RSSI i Manufacturer Specific Data. Veličina reklamnog paketa je ograničena na 31 bajt. Za prenos dodatnih podataka koristi se Scan Response — drugi paket koji centralni uređaj zahteva nakon otkrivanja.
Na iOS-u, frejmvork Core Bluetooth upravlja Bluetooth Low Energy. CBCentralManager upravlja skeniranjem i vezom, CBPeripheral predstavlja udaljeni BLE uređaj. Proces je standardan: inicijalizacija CBCentralManager, provera stanja poweredOn, pokretanje scanForPeripherals, povezivanje i otkrivanje servisa. Core Bluetooth automatski upravlja napajanjem radio modula — ako se BLE ne koristi, isključuje se.
BLE u mobilnom razvoju na iOS-u zahteva uzimanje u obzir pozadinskih režima. Pozadinski režim Core Bluetooth se uključuje kroz Capabilities projekta (Uses Bluetooth LE accessories). U pozadini, aplikacija može primati obaveštenja od karakteristika, ali je skeniranje ograničeno — sistem ga ponovo pokreće samo kada se uređaj pomera. Za iBeacon, pozadinsko skeniranje radi aktivnije kroz CLLocationManager.
import CoreBluetooth
class DeviceScanner: NSObject, CBCentralManagerDelegate {
var centralManager: CBCentralManager!
func start() {
centralManager = CBCentralManager(delegate: self, queue: nil)
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
guard central.state == .poweredOn else { return }
central.scanForPeripherals(withServices: nil, options: nil)
}
func centralManager(_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber) {
print("Pronađeno: \(peripheral.name ?? "unknown")")
}
}
U ovom primeru, CBCentralManagerDelegate obrađuje sve događaje BLE veze. Metod centralManagerDidUpdateState proverava da li je Bluetooth uključen na mobilnom uređaju. Nakon uspešne inicijalizacije, započinje skeniranje. Callback didDiscover se poziva za svaki pronađeni uređaj.
Nakon otkrivanja uređaja, potrebno je pozvati connect i discoverServices. CBPeripheralDelegate pruža metode za obradu svakog koraka: didDiscoverServices, didDiscoverCharacteristics, didUpdateValueFor. Svaki metod je asinhron — podaci stižu putem delegatskih callback-a. RSSI (Received Signal Strength Indicator) pokazuje nivo signala: što je vrednost bliža 0, to je signal jači.
Na Android-u, Bluetooth Low Energy se implementira kroz paket android.bluetooth. BluetoothAdapter je ulazna tačka za sve BLE operacije. BluetoothLeScanner pokreće skeniranje sa callback-ovima ScanCallback. Nakon otkrivanja uređaja, kreira se BluetoothGatt — veza sa periferijom. BluetoothGattCallback obrađuje događaje: povezivanje, otkrivanje servisa, čitanje karakteristika, promene RSSI.
Bluetooth Low Energy u mobilnim aplikacijama na Android-u zahteva eksplicitne dozvole BLUETOOTH_SCAN, BLUETOOTH_CONNECT i ACCESS_FINE_LOCATION. Od Android 12, dozvole su razdvojene: BLUETOOTH_SCAN za skeniranje, BLUETOOTH_CONNECT za povezivanje. ACCESS_FINE_LOCATION je potrebna samo za skeniranje određenih tipova uređaja. Bez ovih dozvola, aplikacija ne može raditi sa BLE.
class BLEScanner(private val bluetoothAdapter: BluetoothAdapter) {
fun startScan() {
val scanner = bluetoothAdapter.bluetoothLeScanner
val settings = ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build()
scanner.startScan(null, settings, scanCallback)
}
private val scanCallback = object : ScanCallback() {
override fun onScanResult(callbackType: Int, result: ScanResult) {
val device = result.device
val rssi = result.rssi
Log.d("BLE", "Uređaj: ${device.name}, RSSI: $rssi")
}
}
}
ScanSettings omogućava konfigurisanje režima skeniranja: LOW_POWER za uštedu baterije, BALANCED za standardne zadatke, LOW_LATENCY za maksimalnu brzinu otkrivanja. ScanFilter sužava pretragu po UUID servisa, imenu uređaja ili MAC adresi. Filtriranje smanjuje potrošnju energije i ubrzava otkrivanje željenog uređaja.
Nakon kreiranja BluetoothGatt kroz connectGatt, aplikacija poziva discoverServices. BluetoothGattCallback sadrži onServicesDiscovered, onCharacteristicRead, onCharacteristicChanged. Za primanje obaveštenja o promenama karakteristike, potrebno je pozvati setCharacteristicNotification. Proces zahteva pažnju: svaka GATT operacija je asinhrona, a rezultat stiže u posebnom callback-u.
iBeacon je Apple-ova tehnologija za BLE majake koji prenose UUID, Major i Minor. Uređaj-majak emituje reklamni paket, a mobilna aplikacija na osnovu ovih podataka određuje lokaciju i udaljenost. Na iOS-u, iBeacon je izvorno podržan kroz CLLocationManager. Na Android-u je potrebna biblioteka treće strane (na primer, AltBeacon ili Android iBeacon Library).
Bonding je procedura kreiranja trajne sigurne veze između BLE uređaja. Nakon Bonding-a, ključevi šifrovanja se čuvaju i uređaji se automatski povezuju kada se ponovo približe. Na iOS-u, bonding se upravlja automatski od strane sistema. Na Android-u — kroz BluetoothDevice.createBond(). Bonding je važan za nosive uređaje i fitnes trackere koji zahtevaju brzo ponovno povezivanje.
Advertising Data je ključni mehanizam otkrivanja u Bluetooth Low Energy. Proizvođači uređaja mogu dodati Manufacturer Specific Data u reklamni paket za prenos prilagođenih podataka. Format paketa uključuje Company Identifier (2 bajta) i proizvoljne podatke. Na iOS-u, CBCentralManager prihvata niz UUID-ova servisa za filtriranje — to štedi bateriju. Na Android-u, ScanFilter radi na istom principu.
| Parametar | iOS (Core Bluetooth) | Android (BluetoothGatt) |
|---|---|---|
| Menadžer | CBCentralManager | BluetoothLeScanner |
| Veza | connect(to:) | connectGatt() |
| Servisi | discoverServices() | discoverServices() |
| Čitanje | readValue(for:) | readCharacteristic() |
| Obaveštenja | setNotifyValue(_:for:) | setCharacteristicNotification() |
| Dozvole | Automatske | BLUETOOTH_SCAN, BLUETOOTH_CONNECT |
| iBeacon | CLLocationManager (izvorno) | AltBeacon / biblioteke |
MTU (Maximum Transmission Unit) je maksimalna veličina jednog paketa podataka Bluetooth Low Energy. Podrazumevano, MTU iznosi 23 bajta (3 bajta zaglavlja + 20 bajta podataka). Povećanje MTU na 512 bajta značajno ubrzava prenos prilikom razmene konfiguracija ili logova. Na iOS-u, maximumWriteValueLength pokazuje dostupni MTU. Na Android-u, za povećanje MTU koristi se requestMtu().
Connection Interval je frekvencija kojom centralni uređaj anketira periferiju. Što je interval kraći, to je veća brzina prenosa, ali i potrošnja energije. Tipične vrednosti su od 7,5 ms do 4 sekunde. Za fitnes trackere, 100 ms je dovoljno; za audio — 7,5 ms. BLE u mobilnom razvoju zahteva balans između brzine prenosa i trajanja baterije uređaja.
iOS podržava BLE u pozadinskom režimu kroz Background Modes, ali sa ograničenjima. Aplikacija u pozadini prima obaveštenja od karakteristika, ali ne može aktivno skenirati. Sistem ponovo pokreće skeniranje kada se lokacija uređaja promeni. Na Android-u, pozadinsko skeniranje zahteva Foreground Service sa stalnim obaveštenjem. Bez toga, mobilni sistem će ubiti proces prilikom minimiziranja aplikacije.
Za pouzdan rad BLE u mobilnim aplikacijama, sledite ova pravila. Koristite notify umesto polling-a — karakteristika sa obaveštenjima šalje podatke prilikom promene, štedeći bateriju. Postavite optimalni MTU na početku veze. Filtrirajte uređaje po UUID servisa prilikom skeniranja. Proverite kompatibilnost BLE steka na različitim modelima — proizvođači (Xiaomi, Huawei, Samsung) unose promene koje utiču na ponašanje Bluetooth-a.
Često postavljana pitanja
Bluetooth Low Energy (BLE) je optimizovan za periodični prenos malih paketa sa niskom potrošnjom energije. Klasični Bluetooth je namenjen za audio tokove i kontinuirani prenos velikih količina podataka.
GATT (Generic Attribute Profile) je protokol razmene podataka u BLE koji definiše hijerarhiju Service → Characteristic → Descriptor. GATT se koristi za čitanje, pisanje i primanje obaveštenja od BLE uređaja.
Pre Android 12, BLE skeniranje se moglo koristiti za određivanje lokacije, pa je Google objedinio ove dozvole. Od Android 12, uvedena je posebna dozvola BLUETOOTH_SCAN bez povezivanja sa lokacijom.
Povećajte MTU kroz requestMtu() na Android-u i maximumWriteValueLength na iOS-u. Connection Interval takođe utiče na brzinu — što je manji, to je prenos brži. Optimalna kombinacija daje poboljšanje do 10 puta.
Bonding je procedura kreiranja trajne sigurne veze između BLE uređaja. Nakon Bonding-a, ključevi šifrovanja se čuvaju i uređaji se automatski povezuju bez ponovnog traženja.
Rezime
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.