iOS蓝牙
来源:互联网 发布:电脑好多软件打不开 编辑:程序博客网 时间:2024/05/20 20:22
前几个月做了一个蓝牙的项目,初次接触,也查了好多资料,算是有了个大概的了解,最近又做另一个蓝牙的项目,发现还是有很多地方不是很明白,也为了防止忘记,就写下来吧!
CBCentralManagerOptionShowPowerAlertKey
布尔值,表示的是在central manager初始化时,如果当前蓝牙没打开,是否弹出alert框。
CBCentralManagerOptionRestoreIdentifierKey
CBCentralManagerOptionRestoreIdentifierKey,字符串,一个唯一的标示符,用来蓝牙的恢复连接的。在后台的长连接中可能会用到。
https://github.com/chenee/DarkBlue
连接外设使用connectPeripheral:options: 方法,options为可选,options可以为:
CBConnectPeripheralOptionNotifyOnConnectionKey
CBConnectPeripheralOptionNotifyOnDisconnectionKey
CBConnectPeripheralOptionNotifyOnNotificationKey
在蓝牙连接的过程中,代理方法centralManagerDidUpdateState: 会判断中央设备的状态
保存identity
在CBCentralManager初始化的时候,一般放在另一个线程中:
dispatch_queue_t centralQueue = dispatch_queue_create("myCentralQueue",DISPATCH_QUEUE_SERIAL); _centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:centralQueue];初始化也可以使用如下的方法:
- (id)initWithDelegate:(id<CBCentralManagerDelegate>)delegate queue:(dispatch_queue_t)queue options:(NSDictionary *)options如:
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],CBCentralManagerOptionShowPowerAlertKey,@"zStrapRestoreIdentifier",CBCentralManagerOptionRestoreIdentifierKey,nil];myCenter = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_queue_create("com.myBLEQueue", NULL) options:options];Central Manager Initialization Options 对应的有两项:
CBCentralManagerOptionShowPowerAlertKey
布尔值,表示的是在central manager初始化时,如果当前蓝牙没打开,是否弹出alert框。
CBCentralManagerOptionRestoreIdentifierKey
CBCentralManagerOptionRestoreIdentifierKey,字符串,一个唯一的标示符,用来蓝牙的恢复连接的。在后台的长连接中可能会用到。
就是说,如果蓝牙程序进入后台,程序会被挂起,可能由于memory pressure,程序被系统kill了,那么代理方法就不会执行了。这时候可以使用State Preservation & Restoration,这样程序会重新加载进入后台。
调试iOS蓝牙的时候,可以下个LightBlue,非常方便,网上也有仿写LightBlue的Demo,参考这两处:https://github.com/chenee/DarkBlue
http://boxertan.github.io/blog/2014/07/07/xue-xi-ioslan-ya-ji-zhu-%2Cfang-xie-lightblue/
使用scanForPeripheralsWithServices:options: 来扫描外设
NSDictionary *option = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], CBCentralManagerScanOptionAllowDuplicatesKey,nil];[_centralManager scanForPeripheralsWithServices:nil options:option];
连接外设使用connectPeripheral:options: 方法,options为可选,options可以为:
CBConnectPeripheralOptionNotifyOnConnectionKey
CBConnectPeripheralOptionNotifyOnDisconnectionKey
CBConnectPeripheralOptionNotifyOnNotificationKey
具体的意思参考文档
[myCenter connectPeripheral:peripheralInfo.peripheral options:@{ CBConnectPeripheralOptionNotifyOnConnectionKey: @YES, CBConnectPeripheralOptionNotifyOnDisconnectionKey: @YES, CBConnectPeripheralOptionNotifyOnNotificationKey: @YES}];
在蓝牙连接的过程中,代理方法centralManagerDidUpdateState: 会判断中央设备的状态
- (void)centralManagerDidUpdateState:(CBCentralManager *)central{ // Determine the state of the peripheral if ([central state] == CBCentralManagerStatePoweredOff) { NSLog(@"CoreBluetooth BLE hardware is powered off"); } else if ([central state] == CBCentralManagerStatePoweredOn) { NSLog(@"CoreBluetooth BLE hardware is powered on and ready"); } else if ([central state] == CBCentralManagerStateUnauthorized) { NSLog(@"CoreBluetooth BLE state is unauthorized"); } else if ([central state] == CBCentralManagerStateUnknown) { NSLog(@"CoreBluetooth BLE state is unknown"); } else if ([central state] == CBCentralManagerStateUnsupported) { NSLog(@"CoreBluetooth BLE hardware is unsupported on this platform"); }}
[self.peripheral readValueForCharacteristic:characteristic];[self.peripheral setNotifyValue:YES forCharacteristic:characteristic];以上两个方法都会调用代理方法:didUpdateValueForCharacteristic:error:
向外设的某个characteristic写入值,可以这样写
- (void)writeToperipheral:(CBPeripheral *)peripheral Service:(NSString *)serviceUUID characteristic:(NSString *)characteristicUUID data:(NSData *)data{ CBUUID *servUUID = [CBUUID UUIDWithString:serviceUUID]; CBUUID *charUUID = [CBUUID UUIDWithString:characteristicUUID]; CBService *service = nil; CBCharacteristic *characteristic = nil; for (CBService *ser in peripheral.services) { if ([ser.UUID isEqual:servUUID]) { service = ser; break; } } if (service) { for (CBCharacteristic *charac in service.characteristics) { if ([charac.UUID isEqual:charUUID]) { characteristic = charac; break; } } } if (characteristic) { [peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse]; } else{ NSLog(@"not found that characteristic"); }}
char data;data = 0x15;NSData *d = [[NSData alloc] initWithBytes:&data length:1];
- (void)readPeripheral:(CBPeripheral *)peripheral serviceUUID:(NSString *)serviceUUID characteristicUUID:(NSString *)characteristicUUID{ CBUUID *servUUID = [CBUUID UUIDWithString:serviceUUID]; CBUUID *charUUID = [CBUUID UUIDWithString:characteristicUUID]; CBService *service = nil; CBCharacteristic *characteristic = nil; for (CBService *ser in peripheral.services) { if ([ser.UUID isEqual:servUUID]) { service = ser; break; } } if (service) { for (CBCharacteristic *charac in service.characteristics) { if ([charac.UUID isEqual:charUUID]) { characteristic = charac; break; } } } if (characteristic) { [peripheral readValueForCharacteristic:characteristic]; }else{ NSLog(@"----------未找到当前的characteristic"); }}
保存identity
NSUUID *uuid = peripheral.identifier;NSString *uuidString = uuid.UUIDString;[[NSUserDefaults standardUserDefaults] setObject:uuidString forKey:PERIPHERAL_UUID];[[NSUserDefaults standardUserDefaults] synchronize];然后通过identity,来搜索设备:
NSString *uuidString = [[NSUserDefaults standardUserDefaults] stringForKey:PERIPHERAL_UUID];NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:uuidString];_peripheralArr = [NSMutableArray arrayWithArray: [self.centralManager retrievePeripheralsWithIdentifiers:@[uuid]]];for (CBPeripheral *peripheral in _peripheralArr) { self.peripheral = peripheral; [self.centralManager connectPeripheral:peripheral options:nil];}通过retrieveConnectedPeripheralsWithServices:函数来检索当前连接到系统的蓝牙设备:
NSArray *atmp = [NSArray arrayWithObjects:[CBUUID UUIDWithString:@"180A"], nil];NSArray *retrivedArray = [myCenter retrieveConnectedPeripheralsWithServices:atmp];NSLog(@"retrivedArray:\n%@",retrivedArray);for (CBPeripheral* peripheral in retrivedArray) { [self addPeripheral:peripheral advertisementData:nil RSSI:nil];}
0 0
- ios 蓝牙
- ios 蓝牙
- iOS蓝牙
- iOS 蓝牙
- iOS 蓝牙
- iOS蓝牙
- iOS 蓝牙
- iOS蓝牙
- IOS-蓝牙
- IOS 蓝牙
- Ios蓝牙
- iOS 蓝牙
- iOS 蓝牙
- iOS蓝牙
- iOS 蓝牙
- iOS蓝牙
- [蓝牙]蓝牙4.0 for iOS
- ios 蓝牙开发,蓝牙应用
- unity3d开源Ultimate MMORPG插件技术文档渣翻译第5页
- Object-Oriented Terms 面向对象术语
- SpringMVC form标签
- iOS层级结构
- 黑马程序员---OC基础---类和对象
- iOS蓝牙
- ZOJ-3261(Connections in Galaxy War)——并查集
- 数列求和
- Android控件系列之RadioButton&RadioGroup
- Matlab优化问题06—quadprog
- 设计模式学习--单例模式
- 全民Scheme(3):为什么就不讲道理呢,女人?
- css学习
- java中比较两个日期的先后