在CoreBluetooth框架中,有两个主要的角色:外设和中心,整个框架都是围绕这两个主要角色设计的.
中心角色变成实现过程
1.设置CBCentralManager
2.发现并连接外设
3.发现服务
4.发现特征
5.预定特征通知
6.读取数据
#import <UIKit/UIKit.h>
#import <CoreBluetooth/CoreBluetooth.h>
#define TRANSFER_SERVICE_UUID @"D63D44E5-E798-4EA5-A1C0-3F9EEEC2CDEB"
#define TRANSFER_CHARACTERISTIC_UUID @"1652CAD2-6B0D-4D34-96A0-75058E606A98"
@interface ViewController : UIViewController <CBCentralManagerDelegate, CBPeripheralDelegate>
@property (strong, nonatomic) CBCentralManager *centralManager;//CBCentralManager 是用来管理BLE的中心设备
@property (strong, nonatomic) CBPeripheral *discoveredPeripheral;
@property (strong, nonatomic) NSMutableData *data;
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicatorView;
@property (weak, nonatomic) IBOutlet UILabel *scanLabel;
@property (weak, nonatomic) IBOutlet UITextView *textView;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// 设置CBCentralManager
_centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
// 保存接收数据
_data = [[NSMutableData alloc] init];
}
- (void)viewWillDisappear:(BOOL)animated
{
[self.centralManager stopScan];
[self.activityIndicatorView stopAnimating];
NSLog(@"扫描停止");
[super viewWillDisappear:animated];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
#pragma mark - Central Methods
//设置成功回调方法
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
if (central.state != CBCentralManagerStatePoweredOn) {
return;
}
//开始扫描
[self scan];
}
/** 通过制定的128位的UUID,扫描外设
*/
- (void)scan
{
//扫描
[self.centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID]]
options:@{ CBCentralManagerScanOptionAllowDuplicatesKey : @YES }];
[self.activityIndicatorView startAnimating];
self.scanLabel.hidden = NO;
NSLog(@"Scanning started");
}
/** 停止扫描
*/
- (void)stop
{
[self.centralManager stopScan];
[self.activityIndicatorView stopAnimating];
self.scanLabel.hidden = YES;
self.textView.text = @"";