蓝牙- CoreBluetooth

/**

 *  CoreBluetooth  ----  BLE

 *

 *  @ 蓝牙4.0 + iBeacon  --- 室内导航(超市)

 */

#import "ViewController.h"

#import <CoreBluetooth/CoreBluetooth.h>

 

 

@interface ViewController ()<CBCentralManagerDelegate, CBPeripheralDelegate>

 

 /**  中心管理者 ***/

@property (nonatomic, strong) CBCentralManager *mgr;

 

 /**  保存外围设备 ***/

@property (nonatomic, strong) NSMutableArray *peripherals;

@end

 

@implementation ViewController

 

- (NSMutableArray *)peripherals{

    if (!_peripherals) {

        _peripherals = [[NSMutableArray alloc] init];

    }

    return _peripherals;

}

 

 

- (void)viewDidLoad {

    [super viewDidLoad];

   

    // 1. 创建中心设备

    self.mgr = [[CBCentralManager alloc] init];

    

    // 设置代理

    self.mgr.delegate = self;

    

    // 2. 扫描外围设备

    /**

     *  如果制定数组 代表只扫描指定的设备

     */

    [self.mgr scanForPeripheralsWithServices:nil options:nil];

    

    

    

    

}

 

#pragma mark - 3. CBCentralManagerDelegate

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

{

    // 保存扫描到的外部设备

    // 如果数组中不包含扫描到的设备, 添加设备到数组中

    if (![self.peripherals containsObject:peripheral]) {

 

        // 设置外设代理

        peripheral.delegate = self;

        

        [self.peripherals addObject:peripheral];

    }

}

 

 

/**

 *  模拟点击, 然后连接所有外围设备

 */

- (void)start

{

    for (CBPeripheral *peripheral in self.peripherals) {

        // 连接到外围设备

        [self.mgr connectPeripheral:peripheral options:nil];

    }

}

 

 

/**

 *  4. 连接外设成功

 */

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral

{

    // 扫描外设中的服务(service) nil --- 扫描所有服务

    [peripheral discoverServices:nil];

}

 

 

/**

 *  连接外设失败

 */

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error

{

    LogGreen(@"连接外设失败");

}

 

 

- (void)centralManagerDidUpdateState:(CBCentralManager *)central

{

    

}

 

#pragma mark - CBPeripheralDelegate

/**

 *  只要扫描到外设的服务就会调用

 *

 *  @param peripheral 服务所属的外设

 *  @param error      错误

 */

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error

{

    // 获取外设中所有扫描的服务

    NSArray *services = peripheral.services;

    

    for (CBService *service in services) {

        // 过滤不需要的服务  --- 拿到需要的服务

        if([service.UUID.UUIDString isEqualToString:@""]){

            // 从需要的服务中查找需要的特征

            // 从peripheral中得到的service中, 扫描需要的特征

            [peripheral discoverCharacteristics:nil forService:service];

        }

        

    }

}

 

 

/**

 *  只要扫描到特征就会调用

 *

 *  @param peripheral 特征所属的外设

 *  @param service    特征所属的服务

 */

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error

{

    // 拿到服务中 所有的特征

    NSArray *characters = service.characteristics;

    // 遍历特征, 拿到需要的特征处理

    for (CBCharacteristic *character in characters) {

        if ([character.UUID.UUIDString isEqualToString:@"wakeup"]) {

            LogRed(@"设置闹钟");

            

            // 停止

//            [self.mgr stopScan];

        }

    }

}

posted @ 2015-09-24 17:05  guangleijia  阅读(213)  评论(0编辑  收藏  举报