1

У меня есть пользовательский класс (скажем, MyBLE), который служил в качестве обертки CoreBluetooth (как и для LGBluetooth, я думаю). Он обрабатывает связь между моей BLE принадлежности и устройства IOS:BLE в фоновом режиме: didUpdateValueForCharacteristic not called

MyBLE.h

@interface MyBLE : NSObject 

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

+ (MyBLE *)sharedInstance; 

//... 

@end 

В AppDelegate я инициализируется его как MyBLE объект, который прекрасно работает на переднем плане. Я установил необходимые записи в Info.plist, чтобы использовать UIBackgroundMode в соответствии с Core Bluetooth Programming Guide, поэтому я могу продолжать получать данные, отправляемые аксессуаром BLE.

Но когда я нажал кнопку «домой», консоль Xcode больше не распечатывает никаких сообщений, которые должны быть напечатаны, когда iOS получил данные от периферийного устройства BLE. Устройство уже подключено к устройству iOS (центральное), прежде чем перейти в фоновый режим.

Я пропустил что-нибудь? Кажется, что приложение больше не получает данные с устройства BLE через 3 минуты. (Да, я сделал добавить bluetooth-central)

+1

Является ли периферийное обновление данных и отправка «уведомлять» или вы читаете опрос? Получили ли вы запрос на фоновое разрешение Bluetooth при первом запуске приложения? – Paulw11

+0

Нет. Я не заметил «разрешения Bluetooth для фона». (Я думал, что только фоновое разрешение GPS-отслеживания имеет такую ​​вещь.) В этом случае периферийное устройство отправляет данные в центральный (iOS). Он работал на переднем плане, но консольный журнал не был в фоновом режиме. Я не могу проверить, работает ли он правильно или нет. Или это нормально, что у него нет консольного журнала в фоновом режиме? (что было бы странно). –

ответ

1

После того как я переехал инициализацию MyBLE объекта от -init: к -application:didFinishLaunchingWithOptions:, он работал.

Угадайте, как-то делегат не считался инициализированным в этот момент.