A Bluetooth Low Energy (BLE) egy vezeték nélküli kommunikációs szabvány, amelyet kis adatmennyiségek minimális energiafogyasztással történő továbbítására optimalizáltak. A Bluetooth SIG, 2025 szerint a technológiát világszerte több mint 5 milliárd eszközben használják. A GATT (Generic Attribute Profile) az adatokat Service → Characteristic → Descriptor hierarchiába szervezi, amely az összes iOS és Android BLE-alkalmazás alapját képezi.
Főbb Pontok
A Bluetooth Low Energy (BLE) kliens-szerver modellben működik két szerepkörrel: Central (mobil eszköz) és Peripheral (eszköz). A Central pásztázza az adást és kezdeményezi a kapcsolatot, míg a Peripheral adatokat továbbít. A klasszikus Bluetooth-tal ellentétben a BLE nem hangfolyamokhoz készült — feladata kis csomagok továbbítása minimális energiafogyasztással. A Bluetooth SIG Core Specification 5.4 (2025) szerint a BLE akár 2 Mbps sebességet is támogat 15 mA-nél kisebb áramfelvétellel aktív módban.
A GATT (Generic Attribute Profile) meghatározza a Bluetooth Low Energy adatszerkezetét. A Service a jellemzők logikai csoportja (például Heart Rate Service 0x180D). A Characteristic egy adatpont meghatározott értékkel. A Descriptor a jellemző metaadata, beleértve a CCCD-t az értesítések kezeléséhez. Minden elemhez UUID tartozik — 16 bites a szabványos Bluetooth SIG profilokhoz vagy 128 bites az egyedihez.
A Bluetooth Low Energy a mobilalkalmazásokban ezt a hierarchiát használja az okostelefon és a perifériák közötti adatcsere megszervezéséhez. A GATT helyes megértése a BLE-alkalmazások fejlesztésének alapja mindkét platformon. A fejlesztőnek ismernie kell az eszköz szolgáltatásainak és jellemzőinek UUID-it, valamint az egyes jellemzők tulajdonságait (read, write, notify, indicate).
A BLE-eszközök reklámcsomagokat (advertising packets) továbbítanak a felderítéshez. Az Advertising Data tartalmazza az eszköz nevét, a szolgáltatások UUID-it, az RSSI-t és a Manufacturer Specific Data-t. A reklámcsomag mérete 31 bájtra korlátozódik. További adatok továbbításához a Scan Response-t használják — egy második csomagot, amelyet a központi eszköz a felderítés után kér.
iOS-en a Core Bluetooth keretrendszer kezeli a Bluetooth Low Energy-t. A CBCentralManager a szkennelést és a kapcsolatot kezeli, a CBPeripheral egy távoli BLE-eszközt képvisel. A folyamat szabványos: a CBCentralManager inicializálása, a poweredOn állapot ellenőrzése, a scanForPeripherals elindítása, csatlakozás és szolgáltatások felderítése. A Core Bluetooth automatikusan kezeli a rádiómodul tápellátását — ha a BLE nincs használatban, kikapcsol.
A BLE a mobilfejlesztésben iOS-en megköveteli a háttérmódok figyelembevételét. A Core Bluetooth háttérmód a projekt Capabilities (Uses Bluetooth LE accessories) részén keresztül kapcsolható be. Háttérben az alkalmazás fogadhat értesítéseket a jellemzőktől, de a szkennelés korlátozott — a rendszer csak akkor indítja újra, ha az eszköz mozog. Az iBeacon esetében a háttér-szkennelés aktívabban működik a CLLocationManager-en keresztül.
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("Találat: \(peripheral.name ?? "unknown")")
}
}
Ebben a példában a CBCentralManagerDelegate kezeli az összes BLE-kapcsolati eseményt. A centralManagerDidUpdateState metódus ellenőrzi, hogy a Bluetooth be van-e kapcsolva a mobileszközön. Sikeres inicializálás után a szkennelés elindul. A didDiscover callback minden megtalált eszköznél meghívódik.
Egy eszköz felderítése után meg kell hívni a connect és discoverServices függvényeket. A CBPeripheralDelegate metódusokat biztosít az egyes lépések kezeléséhez: didDiscoverServices, didDiscoverCharacteristics, didUpdateValueFor. Minden metódus aszinkron — az adatok delegált callback-eken keresztül érkeznek. Az RSSI (Received Signal Strength Indicator) a jelerősséget mutatja: minél közelebb van az érték a 0-hoz, annál erősebb a jel.
Androidon a Bluetooth Low Energy az android.bluetooth csomagon keresztül van megvalósítva. A BluetoothAdapter a belépési pont az összes BLE-művelethez. A BluetoothLeScanner elindítja a szkennelést ScanCallback callback-ekkel. Egy eszköz felderítése után létrejön a BluetoothGatt — egy kapcsolat a perifériához. A BluetoothGattCallback kezeli az eseményeket: csatlakozás, szolgáltatások felderítése, jellemzők olvasása, RSSI-változások.
A Bluetooth Low Energy a mobilalkalmazásokban Androidon explicit BLUETOOTH_SCAN, BLUETOOTH_CONNECT és ACCESS_FINE_LOCATION engedélyeket igényel. Az Android 12-től az engedélyek külön vannak választva: BLUETOOTH_SCAN a szkenneléshez, BLUETOOTH_CONNECT a csatlakozáshoz. Az ACCESS_FINE_LOCATION csak bizonyos típusú eszközök szkenneléséhez szükséges. Ezen engedélyek nélkül az alkalmazás nem tud BLE-vel működni.
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", "Eszköz: ${device.name}, RSSI: $rssi")
}
}
}
A ScanSettings lehetővé teszi a szkennelési mód konfigurálását: LOW_POWER az akkumulátor kíméléséhez, BALANCED a szabványos feladatokhoz, LOW_LATENCY a maximális felderítési sebességhez. A ScanFilter szűkíti a keresést szolgáltatás UUID, eszköznév vagy MAC-cím alapján. A szűrés csökkenti az energiafogyasztást és felgyorsítja a kívánt eszköz felderítését.
A BluetoothGatt connectGatt-on keresztüli létrehozása után az alkalmazás meghívja a discoverServices-t. A BluetoothGattCallback tartalmazza az onServicesDiscovered, onCharacteristicRead, onCharacteristicChanged függvényeket. A jellemzőváltozásokról szóló értesítések fogadásához meg kell hívni a setCharacteristicNotification-t. A folyamat figyelmet igényel: minden GATT-művelet aszinkron, és az eredmény egy külön callback-ben érkezik.
Az iBeacon az Apple technológiája a BLE-jeladókhoz, amelyek UUID-t, Major-t és Minor-t továbbítanak. A jeladó eszköz reklámcsomagot sugároz, és a mobilalkalmazás ezen adatok alapján határozza meg a helyzetet és távolságot. iOS-en az iBeacon natívan támogatott a CLLocationManager-en keresztül. Androidon harmadik féltől származó könyvtárra van szükség (például AltBeacon vagy Android iBeacon Library).
A Bonding egy állandó biztonságos kapcsolat létrehozásának eljárása a BLE-eszközök között. A Bonding után a titkosítási kulcsok elmentésre kerülnek, és az eszközök automatikusan csatlakoznak, amikor ismét közel kerülnek egymáshoz. iOS-en a bonding-ot a rendszer automatikusan kezeli. Androidon — a BluetoothDevice.createBond()-on keresztül. A Bonding fontos a viselhető eszközök és fitneszkövetők számára, amelyek gyors újracsatlakozást igényelnek.
Az Advertising Data kulcsfontosságú felderítési mechanizmus a Bluetooth Low Energy-ben. Az eszközgyártók Manufacturer Specific Data-t adhatnak a reklámcsomaghoz egyedi adatok továbbításához. A csomag formátuma tartalmazza a Company Identifier-t (2 bájt) és tetszőleges adatokat. iOS-en a CBCentralManager szolgáltatás UUID-k tömbjét fogadja el a szűréshez — ez kíméli az akkumulátort. Androidon a ScanFilter ugyanezen az elven működik.
| Paraméter | iOS (Core Bluetooth) | Android (BluetoothGatt) |
|---|---|---|
| Kezelő | CBCentralManager | BluetoothLeScanner |
| Kapcsolat | connect(to:) | connectGatt() |
| Szolgáltatások | discoverServices() | discoverServices() |
| Olvasás | readValue(for:) | readCharacteristic() |
| Értesítések | setNotifyValue(_:for:) | setCharacteristicNotification() |
| Engedélyek | Automatikus | BLUETOOTH_SCAN, BLUETOOTH_CONNECT |
| iBeacon | CLLocationManager (natív) | AltBeacon / könyvtárak |
Az MTU (Maximum Transmission Unit) egyetlen Bluetooth Low Energy adatcsomag maximális mérete. Alapértelmezés szerint az MTU 23 bájt (3 bájt fejléc + 20 bájt adat). Az MTU 512 bájtra növelése jelentősen felgyorsítja az átvitelt konfigurációk vagy naplók cseréjekor. iOS-en a maximumWriteValueLength mutatja az elérhető MTU-t. Androidon az MTU növeléséhez a requestMtu()-t használják.
A Connection Interval az a gyakoriság, amellyel a központi eszköz lekérdezi a perifériát. Minél rövidebb az intervallum, annál nagyobb az átviteli sebesség, de az energiafogyasztás is. Tipikus értékek 7,5 ms-tól 4 másodpercig terjednek. Fitneszkövetők számára 100 ms elegendő; hanghoz — 7,5 ms. A BLE a mobilfejlesztésben egyensúlyt igényel az átviteli sebesség és az eszköz akkumulátor-élettartama között.
Az iOS Background Modes-on keresztül támogatja a BLE-t háttérmódban, de korlátozásokkal. Egy alkalmazás a háttérben értesítéseket kap a jellemzőktől, de nem tud aktívan szkennelni. A rendszer újraindítja a szkennelést, amikor az eszköz helyzete megváltozik. Androidon a háttér-szkenneléshez Foreground Service szükséges állandó értesítéssel. Enélkül a mobilos rendszer megöli a folyamatot az alkalmazás minimalizálásakor.
A BLE megbízható működéséhez a mobilalkalmazásokban kövesse ezeket a szabályokat. Használja a notify-t polling helyett — egy értesítésekkel rendelkező jellemző változás esetén adatokat küld, kímélve az akkumulátort. Állítsa be az optimális MTU-t a kapcsolat elején. Szűrje az eszközöket szolgáltatás UUID alapján szkenneléskor. Ellenőrizze a BLE-verem kompatibilitását különböző modelleken — a gyártók (Xiaomi, Huawei, Samsung) olyan módosításokat végeznek, amelyek befolyásolják a Bluetooth viselkedését.
Gyakran Ismételt Kérdések
A Bluetooth Low Energy (BLE) kis csomagok időszakos továbbítására van optimalizálva alacsony energiafogyasztással. A klasszikus Bluetooth hangfolyamokhoz és nagy adatmennyiségek folyamatos továbbításához készült.
A GATT (Generic Attribute Profile) egy adatcsere-protokoll a BLE-ben, amely meghatározza a Service → Characteristic → Descriptor hierarchiát. A GATT a BLE-eszközökről történő olvasásra, írásra és értesítések fogadására szolgál.
Az Android 12 előtt a BLE-szkennelés helymeghatározásra is használható volt, ezért a Google összevonta ezeket az engedélyeket. Az Android 12-től bevezették a különálló BLUETOOTH_SCAN engedélyt, helymeghatározáshoz való kötődés nélkül.
Növelje az MTU-t a requestMtu()-n keresztül Androidon és a maximumWriteValueLength-en keresztül iOS-en. A Connection Interval szintén befolyásolja a sebességet — minél kisebb, annál gyorsabb az átvitel. Az optimális kombináció akár 10-szeres javulást is eredményez.
A Bonding egy állandó biztonságos kapcsolat létrehozásának eljárása a BLE-eszközök között. A Bonding után a titkosítási kulcsok elmentésre kerülnek, és az eszközök automatikusan csatlakoznak ismételt keresés nélkül.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.