Bluetooth Low Energy (BLE) v mobilním vývoji: co to je, protokoly a jak funguje

Autor: IT Sectr Publikováno: 2026-07-25 Doba čtení: 11 min

Bluetooth Low Energy (BLE) je standard bezdrátové komunikace optimalizovaný pro přenos malých objemů dat s minimální spotřebou energie. Podle Bluetooth SIG, 2025 je tato technologie používána ve více než 5 miliardách zařízení po celém světě. GATT (Generic Attribute Profile) organizuje data do hierarchie Service → Characteristic → Descriptor, která je základem všech BLE aplikací pro iOS a Android.

Klíčové body

  • GATT — protokol výměny dat v Bluetooth Low Energy s hierarchií Service → Characteristic → Descriptor
  • Core Bluetooth — framework Apple pro práci s BLE na iOS, založený na CBCentralManager a CBPeripheral
  • BluetoothGatt — hlavní API pro BLE připojení na Androidu přes BluetoothLeScanner
  • iBeacon — protokol BLE majáků Apple s nativní podporou přes CLLocationManager na iOS
  • Bonding — trvalé šifrované připojení, které eliminuje opakované skenování a párování

Co je Bluetooth Low Energy (BLE) a jak funguje?

Bluetooth Low Energy (BLE) pracuje na modelu klient-server se dvěma rolemi: Central (mobilní zařízení) a Peripheral (zařízení). Central skenuje éter a iniciuje připojení, zatímco Peripheral přenáší data. Na rozdíl od klasického Bluetooth není BLE určen pro audio streamy — jeho úkolem je přenášet malé pakety s minimální spotřebou energie. Podle Bluetooth SIG Core Specification 5.4 (2025) podporuje BLE rychlost až 2 Mbps při proudu menším než 15 mA v aktivním režimu.

Hierarchie GATT: Service, Characteristic, Descriptor

GATT (Generic Attribute Profile) definuje datovou strukturu Bluetooth Low Energy. Service je logická skupina charakteristik (např. Heart Rate Service 0x180D). Characteristic je datový bod s konkrétní hodnotou. Descriptor jsou metadata charakteristiky, včetně CCCD pro správu oznámení. Každý prvek má UUID — 16bitové pro standardní profily Bluetooth SIG nebo 128bitové pro vlastní.

Bluetooth Low Energy v mobilních aplikacích používá tuto hierarchii k organizaci výměny dat mezi smartphonem a periferiemi. Správné pochopení GATT je základem vývoje BLE aplikací na obou platformách. Vývojář musí znát UUID služeb a charakteristik zařízení, stejně jako vlastnosti každé charakteristiky (read, write, notify, indicate).

Advertising Data a Scan Response

Zařízení BLE vysílají reklamní pakety (advertising packets) pro detekci. Advertising Data obsahuje název zařízení, UUID služeb, RSSI a Manufacturer Specific Data. Velikost reklamního paketu je omezena na 31 bajtů. Pro přenos dalších dat se používá Scan Response — druhý paket, který centrální zařízení vyžádá po detekci.

BLE na iOS: Core Bluetooth, CBCentralManager, CBPeripheral

Na iOS spravuje Bluetooth Low Energy framework Core Bluetooth. CBCentralManager spravuje skenování a připojení, CBPeripheral představuje vzdálené BLE zařízení. Proces je standardní: inicializace CBCentralManager, kontrola stavu poweredOn, spuštění scanForPeripherals, připojení a objevení služeb. Core Bluetooth automaticky spravuje napájení rádiového modulu — pokud se BLE nepoužívá, vypne se.

BLE v mobilním vývoji na iOS vyžaduje zohlednění režimů na pozadí. Režim na pozadí Core Bluetooth se zapíná přes Capabilities projektu (Uses Bluetooth LE accessories). Na pozadí může aplikace přijímat oznámení od charakteristik, ale skenování je omezeno — systém jej restartuje pouze při pohybu zařízení. Pro iBeacon funguje skenování na pozadí aktivněji přes CLLocationManager.

Příklad skenování BLE ve Swift

swift
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("Nalezeno: \(peripheral.name ?? "unknown")")
    }
}

V tomto příkladu CBCentralManagerDelegate zpracovává všechny události BLE připojení. Metoda centralManagerDidUpdateState kontroluje, zda je Bluetooth na mobilním zařízení zapnutý. Po úspěšné inicializaci začne skenování. Callback didDiscover je volán pro každé nalezené zařízení.

Připojení a čtení charakteristik v Core Bluetooth

Po objevení zařízení je třeba zavolat connect a discoverServices. CBPeripheralDelegate poskytuje metody pro každý krok: didDiscoverServices, didDiscoverCharacteristics, didUpdateValueFor. Každá metoda je asynchronní — data přicházejí přes delegované callbacky. RSSI (Received Signal Strength Indicator) ukazuje úroveň signálu: čím blíže je hodnota 0, tím silnější je signál.

BLE na Androidu: BluetoothAdapter, BluetoothGatt, BluetoothLeScanner

Na Androidu je Bluetooth Low Energy implementován přes balíček android.bluetooth. BluetoothAdapter je vstupním bodem pro všechny BLE operace. BluetoothLeScanner spouští skenování s callbacky ScanCallback. Po objevení zařízení je vytvořeno BluetoothGatt — připojení k periferii. BluetoothGattCallback zpracovává události: připojení, objevení služeb, čtení charakteristik, změny RSSI.

Bluetooth Low Energy v mobilních aplikacích na Androidu vyžaduje explicitní oprávnění BLUETOOTH_SCAN, BLUETOOTH_CONNECT a ACCESS_FINE_LOCATION. Od Androidu 12 jsou oprávnění oddělena: BLUETOOTH_SCAN pro skenování, BLUETOOTH_CONNECT pro připojení. ACCESS_FINE_LOCATION je nutné pouze pro skenování určitých typů zařízení. Bez těchto oprávnění aplikace nemůže pracovat s BLE.

Příklad skenování BLE v Kotlin

kotlin
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", "Zařízení: ${device.name}, RSSI: $rssi")
        }
    }
}

ScanSettings umožňuje konfigurovat režim skenování: LOW_POWER pro úsporu baterie, BALANCED pro standardní úkoly, LOW_LATENCY pro maximální rychlost detekce. ScanFilter zužuje vyhledávání podle UUID služby, názvu zařízení nebo MAC adresy. Filtrování snižuje spotřebu energie a urychluje detekci požadovaného zařízení.

BluetoothGatt: čtení a oznámení na Androidu

Po vytvoření BluetoothGatt přes connectGatt aplikace zavolá discoverServices. BluetoothGattCallback obsahuje onServicesDiscovered, onCharacteristicRead, onCharacteristicChanged. Pro příjem oznámení o změnách charakteristiky je třeba zavolat setCharacteristicNotification. Proces vyžaduje pozornost: každá operace GATT je asynchronní a výsledek přichází v samostatném callbacku.

iBeacon, Bonding a Advertising Data v ekosystému BLE

iBeacon je technologie Apple pro BLE majáky, které vysílají UUID, Major a Minor. Zařízení-maják vysílá reklamní paket a mobilní aplikace na základě těchto dat určuje polohu a vzdálenost. Na iOS je iBeacon nativně podporován přes CLLocationManager. Na Androidu je vyžadována knihovna třetí strany (např. AltBeacon nebo Android iBeacon Library).

Bonding je postup vytvoření trvalého bezpečného připojení mezi BLE zařízeními. Po Bondingu jsou šifrovací klíče uloženy a zařízení se automaticky připojí při opětovném přiblížení. Na iOS je bonding spravován automaticky systémem. Na Androidu — přes BluetoothDevice.createBond(). Bonding je důležitý pro nositelná zařízení a fitness trackery, které vyžadují rychlé opětovné připojení.

Reklamní pakety a Manufacturer Specific Data

Advertising Data je klíčový mechanismus detekce v Bluetooth Low Energy. Výrobci zařízení mohou přidat Manufacturer Specific Data do reklamního paketu pro přenos vlastních dat. Formát paketu zahrnuje Company Identifier (2 bajty) a libovolná data. Na iOS CBCentralManager přijímá pole UUID služeb pro filtrování — to šetří baterii. Na Androidu ScanFilter funguje na stejném principu.

Srovnání iOS a Android pro vývoj BLE

ParametriOS (Core Bluetooth)Android (BluetoothGatt)
SprávceCBCentralManagerBluetoothLeScanner
Připojeníconnect(to:)connectGatt()
SlužbydiscoverServices()discoverServices()
ČteníreadValue(for:)readCharacteristic()
OznámenísetNotifyValue(_:for:)setCharacteristicNotification()
OprávněníAutomatickáBLUETOOTH_SCAN, BLUETOOTH_CONNECT
iBeaconCLLocationManager (nativní)AltBeacon / knihovny

Optimalizace BLE: MTU, Connection Interval a režim na pozadí

MTU (Maximum Transmission Unit) je maximální velikost jednoho paketu dat Bluetooth Low Energy. Ve výchozím nastavení je MTU 23 bajtů (3 bajty hlavička + 20 bajtů data). Zvýšení MTU na 512 bajtů výrazně urychluje přenos při výměně konfigurací nebo logů. Na iOS maximumWriteValueLength ukazuje dostupné MTU. Na Androidu se pro zvýšení MTU používá requestMtu().

Connection Interval je frekvence, s jakou centrální zařízení dotazuje periferii. Čím kratší interval, tím vyšší rychlost přenosu, ale také vyšší spotřeba energie. Typické hodnoty se pohybují od 7,5 ms do 4 sekund. Pro fitness trackery stačí 100 ms, pro audio — 7,5 ms. BLE v mobilním vývoji vyžaduje rovnováhu mezi rychlostí přenosu a výdrží baterie zařízení.

Režim na pozadí na iOS a Androidu

iOS podporuje BLE v režimu na pozadí přes Background Modes, ale s omezeními. Aplikace na pozadí přijímá oznámení od charakteristik, ale nemůže aktivně skenovat. Systém restartuje skenování při změně polohy zařízení. Na Androidu vyžaduje skenování na pozadí Foreground Service s trvalým oznámením. Bez něj mobilní systém ukončí proces při minimalizaci aplikace.

Praktická doporučení pro optimalizaci

Pro spolehlivý provoz BLE v mobilních aplikacích dodržujte tato pravidla. Používejte notify místo pollingu — charakteristika s oznámeními odesílá data při změně, šetří baterii. Nastavte optimální MTU na začátku připojení. Filtrujte zařízení podle UUID služby při skenování. Zkontrolujte kompatibilitu BLE zásobníku na různých modelech — výrobci (Xiaomi, Huawei, Samsung) provádějí změny ovlivňující chování Bluetooth.

Často kladené otázky

Čím se BLE liší od klasického Bluetooth?

Bluetooth Low Energy (BLE) je optimalizován pro periodický přenos malých paketů s nízkou spotřebou energie. Klasické Bluetooth je určeno pro audio streamy a nepřetržitý přenos velkých objemů dat.

Co je GATT v Bluetooth Low Energy?

GATT (Generic Attribute Profile) je protokol výměny dat v BLE definující hierarchii Service → Characteristic → Descriptor. GATT se používá pro čtení, zápis a příjem oznámení z BLE zařízení.

Proč Android vyžaduje oprávnění ACCESS_FINE_LOCATION pro BLE?

Před Androidem 12 mohlo být skenování BLE používáno k určení polohy, proto Google tato oprávnění spojil. Od Androidu 12 bylo zavedeno samostatné oprávnění BLUETOOTH_SCAN bez vazby na polohu.

Jak zvýšit rychlost přenosu dat přes BLE?

Zvyšte MTU pomocí requestMtu() na Androidu a maximumWriteValueLength na iOS. Connection Interval také ovlivňuje rychlost — čím menší, tím rychlejší přenos. Optimální kombinace poskytuje až 10násobné zlepšení.

Co je Bonding v BLE?

Bonding je postup vytvoření trvalého bezpečného připojení mezi BLE zařízeními. Po Bondingu jsou šifrovací klíče uloženy a zařízení se automaticky připojí bez opakovaného vyhledávání.

Shrnutí

  • Bluetooth Low Energy — standard bezdrátové komunikace pro IoT s minimální spotřebou energie a rychlostí až 2 Mbps
  • GATT organizuje data do hierarchie Service → Characteristic → Descriptor s UUID pro každý prvek
  • Core Bluetooth — framework Apple pro BLE na iOS s CBCentralManager, CBPeripheral a režimy na pozadí
  • BluetoothGatt — hlavní Android API s BluetoothAdapter, BluetoothLeScanner a explicitními oprávněními BLUETOOTH_SCAN
  • iBeacon — technologie BLE majáků s nativní podporou na iOS přes CLLocationManager
  • Bonding umožňuje automatické opětovné připojení po uložení šifrovacích klíčů
  • Bluetooth Low Energy v mobilních aplikacích vyžaduje zohlednění MTU, Connection Interval a omezení pozadí platformy

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt