Bluetooth Low Energy (BLE) ist ein drahtloser Kommunikationsstandard, der für die Übertragung kleiner Datenmengen mit minimalem Stromverbrauch optimiert ist. Laut Bluetooth SIG, 2025 wird die Technologie in mehr als 5 Milliarden Geräten weltweit eingesetzt. GATT (Generic Attribute Profile) organisiert Daten in einer Service → Characteristic → Descriptor-Hierarchie, die die Grundlage aller BLE-Anwendungen für iOS und Android bildet.
Wichtige Erkenntnisse
Bluetooth Low Energy (BLE) arbeitet nach einem Client-Server-Modell mit zwei Rollen: Central (mobiles Gerät) und Peripheral (Gerät). Central scannt die Luft und initiiert die Verbindung, während Peripheral Daten überträgt. Im Gegensatz zu Classic Bluetooth ist BLE nicht für Audiostreams ausgelegt — seine Aufgabe ist die Übertragung kleiner Pakete mit minimalem Stromverbrauch. Laut Bluetooth SIG Core Specification 5.4 (2025) unterstützt BLE Geschwindigkeiten bis zu 2 Mbit/s bei einem Stromverbrauch von weniger als 15 mA im aktiven Modus.
GATT (Generic Attribute Profile) definiert die Datenstruktur von Bluetooth Low Energy. Service ist eine logische Gruppe von Merkmalen (z. B. Heart Rate Service 0x180D). Characteristic ist ein Datenpunkt mit einem bestimmten Wert. Descriptor sind Metadaten eines Merkmals, einschließlich CCCD für die Benachrichtigungsverwaltung. Jedes Element hat eine UUID — 16-Bit für Standard-Bluetooth-SIG-Profile oder 128-Bit für benutzerdefinierte.
Bluetooth Low Energy in mobilen Anwendungen verwendet diese Hierarchie, um den Datenaustausch zwischen einem Smartphone und Peripheriegeräten zu organisieren. Ein korrektes Verständnis von GATT ist die Grundlage für die Entwicklung von BLE-Anwendungen auf beiden Plattformen. Der Entwickler muss die UUIDs der Dienste und Merkmale des Geräts sowie die Eigenschaften jedes Merkmals (read, write, notify, indicate) kennen.
BLE-Geräte senden Werbepakete (Advertising Packets) zur Erkennung. Advertising Data enthält den Gerätenamen, Dienst-UUIDs, RSSI und Manufacturer Specific Data. Die Größe des Werbepakets ist auf 31 Bytes begrenzt. Zur Übertragung zusätzlicher Daten wird Scan Response verwendet — ein zweites Paket, das das zentrale Gerät nach der Erkennung anfordert.
Unter iOS übernimmt das Core Bluetooth-Framework die Bluetooth Low Energy-Funktionalität. CBCentralManager verwaltet das Scannen und die Verbindung, CBPeripheral repräsentiert ein entferntes BLE-Gerät. Der Prozess ist standardmäßig: Initialisieren von CBCentralManager, Überprüfen des poweredOn-Status, Starten von scanForPeripherals, Verbinden und Ermitteln von Diensten. Core Bluetooth verwaltet automatisch die Stromversorgung des Funkmoduls — wenn BLE nicht verwendet wird, schaltet es sich ab.
BLE in der mobilen Entwicklung unter iOS erfordert die Berücksichtigung von Hintergrundmodi. Der Core Bluetooth-Hintergrundmodus wird über die Capabilities des Projekts (Uses Bluetooth LE accessories) aktiviert. Im Hintergrund kann die App Benachrichtigungen von Merkmalen empfangen, aber das Scannen ist eingeschränkt — das System startet es nur neu, wenn sich das Gerät bewegt. Für iBeacon funktioniert das Hintergrundscannen über CLLocationManager aktiver.
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("Gefunden: \(peripheral.name ?? "unknown")")
}
}
In diesem Beispiel behandelt CBCentralManagerDelegate alle BLE-Verbindungsereignisse. Die Methode centralManagerDidUpdateState prüft, ob Bluetooth auf dem mobilen Gerät eingeschaltet ist. Nach erfolgreicher Initialisierung wird das Scannen gestartet. Der Callback didDiscover wird für jedes gefundene Gerät aufgerufen.
Nach dem Erkennen eines Geräts müssen connect und discoverServices aufgerufen werden. CBPeripheralDelegate bietet Methoden zur Behandlung jedes Schritts: didDiscoverServices, didDiscoverCharacteristics, didUpdateValueFor. Jede Methode ist asynchron — Daten kommen über Delegaten-Callbacks an. RSSI (Received Signal Strength Indicator) zeigt den Signalpegel an: Je näher der Wert an 0 liegt, desto stärker ist das Signal.
Unter Android wird Bluetooth Low Energy über das Paket android.bluetooth implementiert. BluetoothAdapter ist der Einstiegspunkt für alle BLE-Operationen. BluetoothLeScanner startet das Scannen mit ScanCallback-Callbacks. Nach dem Erkennen eines Geräts wird BluetoothGatt erstellt — eine Verbindung zum Peripheriegerät. BluetoothGattCallback behandelt Ereignisse: Verbindung, Dienstermittlung, Merkmalslesen, RSSI-Änderungen.
Bluetooth Low Energy in mobilen Anwendungen unter Android erfordert explizite Berechtigungen BLUETOOTH_SCAN, BLUETOOTH_CONNECT und ACCESS_FINE_LOCATION. Seit Android 12 sind die Berechtigungen getrennt: BLUETOOTH_SCAN zum Scannen, BLUETOOTH_CONNECT zum Verbinden. ACCESS_FINE_LOCATION wird nur zum Scannen bestimmter Gerätetypen benötigt. Ohne diese Berechtigungen kann die App nicht mit BLE arbeiten.
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", "Gerät: ${device.name}, RSSI: $rssi")
}
}
}
ScanSettings ermöglicht die Konfiguration des Scan-Modus: LOW_POWER zum Batteriesparen, BALANCED für Standardaufgaben, LOW_LATENCY für maximale Erkennungsgeschwindigkeit. ScanFilter schränkt die Suche nach Dienst-UUID, Gerätename oder MAC-Adresse ein. Die Filterung reduziert den Stromverbrauch und beschleunigt die Erkennung des gewünschten Geräts.
Nach dem Erstellen von BluetoothGatt über connectGatt ruft die App discoverServices auf. BluetoothGattCallback enthält onServicesDiscovered, onCharacteristicRead, onCharacteristicChanged. Um Benachrichtigungen über Merkmalsänderungen zu erhalten, muss setCharacteristicNotification aufgerufen werden. Der Prozess erfordert Aufmerksamkeit: Jeder GATT-Vorgang ist asynchron, und das Ergebnis kommt in einem separaten Callback.
iBeacon ist Apples Technologie für BLE-Beacons, die UUID, Major und Minor übertragen. Das Beacon-Gerät sendet ein Werbepaket, und die mobile Anwendung bestimmt anhand dieser Daten den Standort und die Entfernung. Unter iOS wird iBeacon nativ über CLLocationManager unterstützt. Unter Android ist eine Drittanbieter-Bibliothek erforderlich (z. B. AltBeacon oder Android iBeacon Library).
Bonding ist das Verfahren zur Erstellung einer dauerhaften sicheren Verbindung zwischen BLE-Geräten. Nach dem Bonding werden Verschlüsselungsschlüssel gespeichert, und die Geräte verbinden sich automatisch, wenn sie wieder in Reichweite kommen. Unter iOS wird Bonding automatisch vom System verwaltet. Unter Android — über BluetoothDevice.createBond(). Bonding ist wichtig für Wearables und Fitness-Tracker, die eine schnelle Wiederverbindung benötigen.
Advertising Data ist ein wichtiger Erkennungsmechanismus in Bluetooth Low Energy. Gerätehersteller können Manufacturer Specific Data zum Werbepaket hinzufügen, um benutzerdefinierte Daten zu übertragen. Das Paketformat enthält eine Company Identifier (2 Bytes) und beliebige Daten. Unter iOS akzeptiert CBCentralManager ein Array von Dienst-UUIDs zur Filterung — das spart Batterie. Unter Android funktioniert ScanFilter nach dem gleichen Prinzip.
| Parameter | iOS (Core Bluetooth) | Android (BluetoothGatt) |
|---|---|---|
| Manager | CBCentralManager | BluetoothLeScanner |
| Verbindung | connect(to:) | connectGatt() |
| Dienste | discoverServices() | discoverServices() |
| Lesen | readValue(for:) | readCharacteristic() |
| Benachrichtigungen | setNotifyValue(_:for:) | setCharacteristicNotification() |
| Berechtigungen | Automatisch | BLUETOOTH_SCAN, BLUETOOTH_CONNECT |
| iBeacon | CLLocationManager (nativ) | AltBeacon / Bibliotheken |
MTU (Maximum Transmission Unit) ist die maximale Größe eines einzelnen Bluetooth Low Energy-Datenpakets. Standardmäßig beträgt die MTU 23 Bytes (3 Bytes Header + 20 Bytes Daten). Eine Erhöhung der MTU auf 512 Bytes beschleunigt die Übertragung beim Austausch von Konfigurationen oder Protokollen erheblich. Unter iOS zeigt maximumWriteValueLength die verfügbare MTU an. Unter Android wird requestMtu() verwendet, um die MTU zu erhöhen.
Connection Interval ist die Häufigkeit, mit der das zentrale Gerät das Peripheriegerät abfragt. Je kürzer das Intervall, desto höher die Übertragungsgeschwindigkeit, aber auch der Stromverbrauch. Typische Werte liegen zwischen 7,5 ms und 4 Sekunden. Für Fitness-Tracker sind 100 ms ausreichend, für Audio — 7,5 ms. BLE in der mobilen Entwicklung erfordert ein Gleichgewicht zwischen Übertragungsgeschwindigkeit und Akkulaufzeit des Geräts.
iOS unterstützt BLE im Hintergrundmodus über Background Modes, jedoch mit Einschränkungen. Eine App im Hintergrund empfängt Benachrichtigungen von Merkmalen, kann aber nicht aktiv scannen. Das System startet das Scannen neu, wenn sich der Standort des Geräts ändert. Unter Android erfordert das Hintergrundscannen einen Foreground Service mit einer dauerhaften Benachrichtigung. Ohne diesen wird das System den Prozess beim Minimieren der App beenden.
Für einen zuverlässigen BLE-Betrieb in mobilen Anwendungen befolgen Sie diese Regeln. Verwenden Sie notify anstelle von Polling — ein Merkmal mit Benachrichtigungen sendet Daten bei Änderungen, was Batterie spart. Stellen Sie die optimale MTU zu Beginn der Verbindung ein. Filtern Sie Geräte beim Scannen nach Dienst-UUID. Überprüfen Sie die BLE-Stack-Kompatibilität bei verschiedenen Modellen — Hersteller (Xiaomi, Huawei, Samsung) nehmen Änderungen vor, die das Bluetooth-Verhalten beeinflussen.
Häufig gestellte Fragen
Bluetooth Low Energy (BLE) ist für die regelmäßige Übertragung kleiner Pakete mit geringem Stromverbrauch optimiert. Classic Bluetooth ist für Audiostreams und die kontinuierliche Übertragung großer Datenmengen ausgelegt.
GATT (Generic Attribute Profile) ist ein Datenübertragungsprotokoll in BLE, das die Service → Characteristic → Descriptor-Hierarchie definiert. GATT wird zum Lesen, Schreiben und Empfangen von Benachrichtigungen von BLE-Geräten verwendet.
Vor Android 12 konnte BLE-Scannen zur Standortbestimmung verwendet werden, daher hat Google diese Berechtigungen zusammengeführt. Seit Android 12 gibt es eine separate BLUETOOTH_SCAN-Berechtigung ohne Standortbindung.
Erhöhen Sie die MTU über requestMtu() unter Android und maximumWriteValueLength unter iOS. Connection Interval beeinflusst ebenfalls die Geschwindigkeit — je kleiner, desto schneller die Übertragung. Die optimale Kombination bietet eine bis zu 10-fache Verbesserung.
Bonding ist das Verfahren zur Erstellung einer dauerhaften sicheren Verbindung zwischen BLE-Geräten. Nach dem Bonding werden Verschlüsselungsschlüssel gespeichert, und die Geräte verbinden sich automatisch ohne erneute Suche.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.