Я работаю над этим проектом довольно долгое время. Необходимо периодически собирать данные с устройства bluetooth, когда приложение находится в переключателе приложений в фоновом режиме.iOS Core Bluetooth уведомляет приложение, когда устройство Bluetooth подключается
Моя последняя мысль заключается в использовании Core Bluetooth для уведомления моего приложения, когда подключено устройство Bluetooth, поэтому я могу проверить, работает ли его устройство, а затем делать то, что мне нужно.
Или я пропущу интерпретацию документов, когда он говорит: «didConnectPeripheral»?
У меня возникли проблемы с поиском функции в моем объекте CBCentralManager, чтобы запустить «наблюдателя», чтобы дать мне эти уведомления.
Я здесь по неправильному пути?
Спасибо.
попытка кода использовать ядро Bluetooth:
CBCentralManager *mgr;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
mgr = [CBCentralManager alloc];
CBPeripheral *peripheral = [CBPeripheral alloc];
[mgr connectPeripheral:peripheral options:nil];
// Override point for customization after application launch.
return YES;
}
- (void) mgr:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{
NSLog(@"Device Connected!");
}
- (void) mgr:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{
NSLog(@"Device Disconnected!");
}
- (void)mgr:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
NSLog(@"Did discover peripheral. peripheral: %@ rssi: %@, UUID: %@ advertisementData: %@ ", peripheral, RSSI, peripheral.UUID, advertisementData);
//Do something when a peripheral is discovered.
}
получает сообщение об ошибке:
2014-11-21 23:30:27.730 TelematicsService[436:185202] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]'
*** First throw call stack:
(0x286db49f 0x35e91c8b 0x285fb873 0x285fb657 0x283adb85 0xf005f 0x2bc084f1 0x2bdfd43f 0x2bdff98b 0x2be0a209 0x2bdfe217 0x2ee6c0d1 0x286a1d7d 0x286a1041 0x2869fb7b 0x285ed3c1 0x285ed1d3 0x2bc021bf 0x2bbfcfa1 0xf2a29 0x36411aaf)
libc++abi.dylib: terminating with uncaught exception of type NSException
Благодаря периферическая не полностью определено Я считаю
Просто введите «подключиться» к вашему периферийному устройству. Когда периферийное устройство находится в диапазоне, будет вызываться 'didConnectPeripheral', даже если ваше приложение находится в фоновом режиме. Если вы хотите, чтобы он работал через перезапуск приложений/устройств, то посмотрите на восстановление состояния в руководстве по программированию ядра Bluetooth. – Paulw11
Интересно, что я использую библиотеку, предоставляемую аппаратным обеспечением, которое заботится обо всех протоколах Bluetooth и связи с устройством. Когда вы говорите «connect», вы имеете в виду connectPeripheral объекта CBCentralManager? – theshadow124
Да. Руководство по программированию ядра Bluetooth обсуждает фоновые соединения - https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Концептуальные/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html # // apple_ref/doc/uid/TP40013257 – Paulw11