`
_wyh
  • 浏览: 59522 次
社区版块
存档分类
最新评论

ios CoreBluetooth外围设备的实现

    博客分类:
  • ios
ios 
阅读更多

CoreBlueTooth的使用要求设备必须支持蓝牙4.0,并且手机型号必须是iPhone4以上。

CoreBlueTooth关键在于两个名词,周边和中央,每个IOS设备都可以是一个周边,也可以是一个中央,但不能既是周边又是中央。
周边可以广播数据,可以告诉周围其他设备来接受数据,中央就是接收数据的那个设备。

如果一个ios手机,它既能当作外围设备,又能当作中央设备,那么在代码中就必须实现外围设备和中央设备这两种代码。

外围设备的实现大体分为以下步骤:
   1,创建周边管理类,Peripheral Manager
   2,为这个Peripheral Manager添加它自己的信息,比如各种服务,以及服务里面包括的各种特征。
   3,广播服务,告知其他设备该外围的存在。
   4,中央设备连接之后,与中央设备进行交互。

具体实现:
    1,在一个类中引入CoreBluetooth,并实现CBPeripheralManagerDelegate协议,在.h文件中声明CBPeripheralManager ,以及需要添加的服务和特征

#import <CoreBluetooth/CoreBluetooth.h>
@property (nonatomic, strong) CBPeripheralManager *manager;
@property (nonatomic, strong) CBMutableService*cutomService;
@property (nonatomic, strong) CBMutableCharacteristicclass*customCharacteristic;

    

     2,在viewDidLoad中初始化manager。

self.manager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];

   

     3,实现peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral

- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral {

    switch (peripheral.state) {

        case CBPeripheralManagerStatePoweredOn:

            [self setupService];

            break;

        default:

            NSLog(@"Peripheral Manager did change state");

            break;

    }

}

   这个代理方法在设备打开蓝牙或关闭蓝牙时运行,如果设备不支持蓝牙,做一些提醒。setupService是自己实现的添加服务的方法。

 

    4,添加服务以及服务的特征。实现上面的setupService方法。

- (void)setupService {
    CBUUID *characteristicUUID = [CBUUID UUIDWithString:kCharaUUID];
    self.customCharacteristic = [[CBMutableCharacteristic alloc] initWithType: characteristicUUID properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];
    
    CBUUID *serviceUUID = [CBUUID UUIDWithString:kServiceUUID];
    self.customService = [[CBMutableService alloc] initWithType:serviceUUID primary:YES];
    
    [self.customService setCharacteristics:@[self.customCharacteristic]];

    [self.peripheralManager addService:self.customService];
}

     CBCharacteristicPropertyNotify 表示该特征可以被其他设备订阅。

 

    5,实现peripheralManager:didAddService:error:

- (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error {
    if (error == nil) {
        // Starts advertising the service
        [self.peripheralManager startAdvertising:@{ CBAdvertisementDataLocalNameKey : @"ICServer", CBAdvertisementDataServiceUUIDsKey : @[[CBUUID UUIDWithString:kServiceUUID]] }];
    }
}

   如果[self.peripheralManager addService:self.customService]执行了,也就是外围设备添加了服务,就会执行peripheralManager:didAddService:error:  然后执行startAdvertising开始广播。

  

    6,收到中央设备的消息后运行的方法。

//订阅
-(void)peripheralManager:(CBPeripheralManager )peripheral central:(CBCentral )central didSubscribeToCharacteristic:(CBCharacteristic )characteristic;
//取消订阅
-(void)peripheralManager:(CBPeripheralManager )peripheral central:(CBCentral )central didUnsubscribeFromCharacteristic:(CBCharacteristic )characteristic;
//读消息
-(void)peripheralManager:(CBPeripheralManager )peripheral didReceiveReadRequest:(CBATTRequest )request;
//写消息
-(void)peripheralManager:(CBPeripheralManager )peripheral didReceiveWriteRequests:(NSArray<CBATTRequest > *)requests;

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics