1

Ich habe eine benutzerdefinierte Klasse (sagen wir MyBLE), die als CoreBluetooth Wrapper diente (ähnlich wie LGBluetooth, denke ich). Es behandelt die Kommunikation zwischen meinem BLE Zubehör und dem iOS-Gerät:BLE im Hintergrundmodus: didUpdateValueForCharacteristic nicht aufgerufen

MyBLE.h

@interface MyBLE : NSObject 

@property (nonatomic, strong) CBCentralManager *central; 
@property (nonatomic, strong) CBPeripheral  *peripheral; 

+ (MyBLE *)sharedInstance; 

//... 

@end 

Im AppDelegate, ich es als MyBLE Objekt initialisiert, die im Vordergrund gut funktioniert. Ich habe die notwendigen Einträge in der Info.plist eingerichtet, um die UIBackgroundMode nach Core Bluetooth Programming Guide zu verwenden, so dass ich immer Daten vom BLE-Zubehör bekommen kann.

Aber als ich die Home-Taste gedrückt habe, druckt die Xcode-Konsole keine Nachricht mehr aus, die gedruckt werden sollte, wenn das iOS Daten von der BLE-Peripherie hat. Das Gerät ist bereits mit dem iOS-Gerät (zentral) verbunden, bevor es in den Hintergrundmodus ging.

Habe ich etwas übersehen? Es scheint, dass die App nach 3 Minuten keine Daten mehr vom BLE-Gerät erhält. (Ja, ich hinzufügen, tat das bluetooth-central)

+1

Aktualisiert das Peripheriegerät die Daten und sendet "notify" oder gibt es einen Abruflesevorgang aus? Wurden Sie bei der ersten Ausführung der App zur Eingabe einer Hintergrund-Bluetooth-Berechtigung aufgefordert? – Paulw11

+0

Nein, ich habe keine "Hintergrund-Bluetooth-Erlaubnis" bemerkt. (Ich dachte nur die Hintergrund-GPS-Tracking-Berechtigung hat so etwas.) Das Peripheriegerät sendet in diesem Fall Daten an die Zentrale (iOS). Es funktionierte im Vordergrund, aber kein Konsolenprotokoll im Hintergrund. Ich kann nicht überprüfen, ob es richtig funktioniert oder nicht. Oder ist es normal, dass es sich nicht im Hintergrund angemeldet hat? (Das wäre seltsam.) –

Antwort

1

Nachdem ich die Initialisierung von MyBLE Objekt -init:--application:didFinishLaunchingWithOptions: bewegt, hat es funktioniert.

Raten Sie irgendwie der Delegat wurde zu diesem Zeitpunkt nicht als initialisiert betrachtet.