iOS蓝牙开发
2016-03-17 09:30
417 查看
文章转自:http://www.cnblogs.com/ctaodream/archive/2013/07/03/3169962.html
一、服务端(也叫周边设备吧。。脑残的翻译)
1.实现类必须遵守协议 CBPeripheralManagerDelegate
2.需要的主要类有:
@property(strong,nonatomic) CBPeripheralManager *peripheraManager;
@property(strong,nonatomic) CBMutableCharacteristic *customerCharacteristic;
@property (strong,nonatomic) CBMutableService *customerService;
3.调用流程代码中有注释
View Code
二、客户端(也叫中心设备吧)
1.实现类要遵守协议<CBCentralManagerDelegate,CBPeripheralDelegate>
2.主要用到的类有
@property(strong,nonatomic)CBCentralManager *centralManager;
@property(strong,nonatomic)NSMutableData *mutableData;
@property(strong,nonatomic)CBPeripheral *peripheral;
3.一般的流程
一、服务端(也叫周边设备吧。。脑残的翻译)
1.实现类必须遵守协议 CBPeripheralManagerDelegate
2.需要的主要类有:
@property(strong,nonatomic) CBPeripheralManager *peripheraManager;
@property(strong,nonatomic) CBMutableCharacteristic *customerCharacteristic;
@property (strong,nonatomic) CBMutableService *customerService;
3.调用流程代码中有注释
// // ViewController.m // BlueToothDemo // // Created by PSH_Chen_Tao on 7/3/13. // Copyright (c) 2013 wolfman. All rights reserved. // #import "ViewController.h" static NSString *const kCharacteristicUUID = @"CCE62C0F-1098-4CD0-ADFA-C8FC7EA2EE90"; static NSString *const kServiceUUID = @"50BD367B-6B17-4E81-B6E9-F62016F26E7B"; @interface ViewController () @end @implementation ViewController @synthesize peripheraManager; @synthesize customerCharacteristic; @synthesize customerService; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //初始化后会直接调用代理的 - (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral peripheraManager = [[CBPeripheralManager alloc]initWithDelegate:self queue:nil]; // [peripheraManager startAdvertising:nil]; } -(void)setUp{ CBUUID *characteristicUUID = [CBUUID UUIDWithString:kCharacteristicUUID]; customerCharacteristic = [[CBMutableCharacteristic alloc]initWithType:characteristicUUID properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable]; CBUUID *serviceUUID = [CBUUID UUIDWithString:kServiceUUID]; customerService = [[CBMutableService alloc]initWithType:serviceUUID primary:YES]; [customerService setCharacteristics:@[characteristicUUID]]; //添加后就会调用代理的- (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error [peripheraManager addService:customerService]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark -- CBPeripheralManagerDelegate - (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral{ switch (peripheral.state) { //在这里判断蓝牙设别的状态 当开启了则可调用 setUp方法(自定义) case CBPeripheralManagerStatePoweredOn: NSLog(@"powered on"); [self setUp]; break; case CBPeripheralManagerStatePoweredOff: NSLog(@"powered off"); break; default: break; } } - (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error{ if (error == nil) { //添加服务后可以在此向外界发出通告 调用完这个方法后会调用代理的 //(void)peripheralManagerDidStartAdvertising:(CBPeripheralManager *)peripheral error:(NSError *)error [peripheraManager startAdvertising:@{CBAdvertisementDataLocalNameKey : @"Service",CBAdvertisementDataServiceUUIDsKey : [CBUUID UUIDWithString:kServiceUUID]}]; } } - (void)peripheralManagerDidStartAdvertising:(CBPeripheralManager *)peripheral error:(NSError *)error{ NSLog(@"in peripheralManagerDidStartAdvertisiong:error"); } @end
View Code
二、客户端(也叫中心设备吧)
1.实现类要遵守协议<CBCentralManagerDelegate,CBPeripheralDelegate>
2.主要用到的类有
@property(strong,nonatomic)CBCentralManager *centralManager;
@property(strong,nonatomic)NSMutableData *mutableData;
@property(strong,nonatomic)CBPeripheral *peripheral;
3.一般的流程
// // ViewController.m // BlueToothClient // // Created by PSH_Chen_Tao on 7/3/13. // Copyright (c) 2013 wolfman. All rights reserved. // #import "ViewController.h" static NSString *const kCharacteristicUUID = @"CCE62C0F-1098-4CD0-ADFA-C8FC7EA2EE90"; static NSString *const kServiceUUID = @"50BD367B-6B17-4E81-B6E9-F62016F26E7B"; @interface ViewController () @end @implementation ViewController @synthesize centralManager; @synthesize mutableData; @synthesize peripheral; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //初始化后会调用代理CBCentralManagerDelegate 的 - (void)centralManagerDidUpdateState:(CBCentralManager *)central centralManager = [[CBCentralManager alloc]initWithDelegate:self queue:nil]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark -- CBCentralManagerDelegate - (void)centralManagerDidUpdateState:(CBCentralManager *)central{ switch (central.state) { //判断状态开始扫瞄周围设备 第一个参数为空则会扫瞄所有的可连接设备 你可以 //指定一个CBUUID对象 从而只扫瞄注册用指定服务的设备 //scanForPeripheralsWithServices方法调用完后会调用代理CBCentralManagerDelegate的 //- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI方法 case CBCentralManagerStatePoweredOn: [centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:kServiceUUID]] options:@{CBCentralManagerScanOptionAllowDuplicatesKey : YES}]; break; default: break; } } - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{ if (peripheral) { self.peripheral = peripheral; //发现设备后即可连接该设备 调用完该方法后会调用代理CBCentralManagerDelegate的- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral表示连接上了设别 //如果不能连接会调用 - (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error [centralManager connectPeripheral:peripheral options:@{CBConnectPeripheralOptionNotifyOnConnectionKey : YES}]; } } - (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{ NSLog(@"has connected"); [mutableData setLength:0]; self.peripheral.delegate = self; //此时设备已经连接上了 你要做的就是找到该设备上的指定服务 调用完该方法后会调用代理CBPeripheralDelegate(现在开始调用另一个代理的方法了)的 //- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error [self.peripheral discoverServices:@[[CBUUID UUIDWithString:kServiceUUID]]]; } - (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{ //此时连接发生错误 NSLog(@"connected periphheral failed"); } #pragma mark -- CBPeripheralDelegate - (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error{ if (error==nil) { //在这个方法中我们要查找到我们需要的服务 然后调用discoverCharacteristics方法查找我们需要的特性 //该discoverCharacteristics方法调用完后会调用代理CBPeripheralDelegate的 //- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error for (CBService *service in peripheral.services) { if ([service.UUID isEqual:[CBUUID UUIDWithString:kServiceUUID]]) { [peripheral discoverCharacteristics:@[[CBUUID UUIDWithString:kCharacteristicUUID]] forService:service]; } } } } - (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{ if (error==nil) { //在这个方法中我们要找到我们所需的服务的特性 然后调用setNotifyValue方法告知我们要监测这个服务特性的状态变化 //当setNotifyValue方法调用后调用代理CBPeripheralDelegate的- (void)peripheral:(CBPeripheral *)peripheral didUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error for (CBCharacteristic *characteristic in service.characteristics) { if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:kCharacteristicUUID]]) { [peripheral setNotifyValue:YES forCharacteristic:characteristic]; } } } } - (void)peripheral:(CBPeripheral *)peripheral didUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{ if (error==nil) { //调用下面的方法后 会调用到代理的- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error [peripheral readValueForCharacteristic:characteristic]; } } - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{ } @end
相关文章推荐
- 腾讯iOS预审团队分享:被苹果拒绝100多次,一半原因是“IAP异常”
- KVC的用法
- 2015年iOS开发者收入调查报告--企业开发者
- iOS 项目配置
- iOS时钟动画实现
- 你真的了解iOS代理设计模式吗?
- 在写一个iOS应用之前必须做的7件事(附相关资源)
- iOS-自定义导航栏后侧滑返回功能失效
- IOS 杂笔-3 (property参数)
- iOS开发中 常用代码整理
- iOS小菜那些年写过的宏文件
- iOS多线程的初步研究(十)-- dispatch同步
- iOS多线程的初步研究(九)-- dispatch源
- ios的动画
- iOS开发之集成百度地图踩过的那些坑(基于 Xcode7.0/iOS9.2)
- iOS 动态获取类中方法
- iOS 坐标转换,tableViewCell图片点击放大缩小回原位 —— HERO博客
- iOS8的一些兼容问题
- iOS自定义转场动画<转>
- iOS增量插件开发