ios蓝牙使用demo
来源:互联网 发布:java打印上下杨辉三角 编辑:程序博客网 时间:2024/05/19 01:31
简单粗暴上代码
步骤解释请看另一篇 http://blog.csdn.net/swibyn/article/details/20531593
demo下载 http://download.csdn.net/detail/swibyn/9717588
#import "TableViewController.h"#import "CoreBluetooth/CoreBluetooth.h"#pragma mark - CBPeripheral Category//扩展,主要是界面显示用@interface CBPeripheral (Text)-(NSString *)stateText;@end@implementation CBPeripheral (Text)-(NSString *)stateText{ NSArray *array = @[@"Disconnected",@"Connecting",@"Connected",@"Disconnecting"]; NSInteger index = self.state; return array[index];}@end#pragma mark - NSString Category@interface NSString (Category)@property (readonly) NSData *hexData;@end@implementation NSString (Category)-(NSData *)hexData{ NSUInteger len = [self length] / 2; // Target length unsigned char *buf = malloc(len); unsigned char *whole_byte = buf; char byte_chars[3] = {'\0','\0','\0'}; int i; for (i=0; i < [self length] / 2; i++) { byte_chars[0] = [self characterAtIndex:i*2]; byte_chars[1] = [self characterAtIndex:i*2+1]; *whole_byte = strtol(byte_chars, NULL, 16); whole_byte++; } NSData *data = [NSData dataWithBytes:buf length:len]; free( buf ); return data;}@end#pragma mark - TableViewController@interface TableViewController ()<CBCentralManagerDelegate,CBPeripheralDelegate>@property CBCentralManager* centralManger;@property NSMutableArray* peripherals;@end@implementation TableViewController- (void)viewDidLoad { [super viewDidLoad]; self.centralManger = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; self.peripherals = [NSMutableArray array];}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}#pragma mark utils#pragma mark Action- (IBAction)scanBarButtonAction:(id)sender { for (CBPeripheral* peripheral in self.peripherals) { if (peripheral.state != CBPeripheralStateDisconnected) { [self.centralManger cancelPeripheralConnection:peripheral]; } } [self.peripherals removeAllObjects]; [self.centralManger scanForPeripheralsWithServices:nil options:nil];}#pragma mark Table view data source- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.peripherals.count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; CBPeripheral *peripheral = self.peripherals[indexPath.row]; // Configure the cell... cell.textLabel.text = peripheral.name; cell.detailTextLabel.text = peripheral.stateText; return cell;}#pragma mark Table view Delegate-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ CBPeripheral *peripheral = self.peripherals[indexPath.row]; if (peripheral.state == CBPeripheralStateConnected) { [self.centralManger cancelPeripheralConnection:peripheral]; }else if(peripheral.state == CBPeripheralStateDisconnected){ [self.centralManger connectPeripheral:peripheral options:nil]; }}#pragma mark CBCentralManagerDelegate-(void)centralManagerDidUpdateState:(CBCentralManager *)central{}-(void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{ NSLog(@"%s",__FUNCTION__); peripheral.delegate = self; [peripheral discoverServices:nil]; [self.tableView reloadData];}-(void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{ NSLog(@"%s",__FUNCTION__); NSLog(@"error:%@",error); [self.tableView reloadData];}-(void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{ NSLog(@"%s",__FUNCTION__);}-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI{ NSLog(@"peripheral:%@",peripheral); NSLog(@"advertisementData:%@",advertisementData); [self.peripherals addObject:peripheral]; [self.tableView reloadData];}#pragma mark CBPeripheralDelegate-(void)peripheralDidUpdateName:(CBPeripheral *)peripheral{}-(void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error{ NSLog(@"%s",__FUNCTION__); for (CBService *service in peripheral.services) { [peripheral discoverCharacteristics:nil forService:service]; }}-(void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{ NSLog(@"%s",__FUNCTION__); if ([service.UUID.UUIDString isEqualToString:@"EDBC"]) {//你需要的service UUID for (CBCharacteristic *characteristic in service.characteristics) { if ([characteristic.UUID.UUIDString isEqualToString:@"ED01"]) {//你需要的characteristic UUID NSLog(@"EDBC ED01 found"); [peripheral setNotifyValue:YES forCharacteristic:characteristic]; NSData *data = @"0209010000000201000002".hexData; NSLog(@"write:%@",data); [peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse]; return; } } }}-(void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{ NSLog(@"%s",__FUNCTION__);}-(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{ NSLog(@"%s",__FUNCTION__); NSLog(@"value:%@",characteristic.value);}@end
执行步骤
1,搜索设备 scanBarButtonAction
2,点击列表中的设备 tableView:didSelectRowAtIndexPath:
3,peripheral主动断开
打印的日志如下:
2016-12-22 09:47:19.776 Bluetooth[193:3829] peripheral:<CBPeripheral: 0x15e802b0, identifier = 54D36F04-3DCC-90C9-1AAA-6A453A821FEA, name = eID_00213200333, state = disconnected>2016-12-22 09:47:19.778 Bluetooth[193:3829] advertisementData:{ kCBAdvDataIsConnectable = 1; kCBAdvDataLocalName = "eID_00213200333"; kCBAdvDataServiceUUIDs = ( EDBC );}2016-12-22 09:47:20.585 Bluetooth[193:3829] -[TableViewController centralManager:didConnectPeripheral:]2016-12-22 09:47:20.907 Bluetooth[193:3829] -[TableViewController peripheral:didDiscoverServices:]2016-12-22 09:47:21.027 Bluetooth[193:3829] -[TableViewController peripheral:didDiscoverCharacteristicsForService:error:]2016-12-22 09:47:21.028 Bluetooth[193:3829] EDBC ED01 found2016-12-22 09:47:21.029 Bluetooth[193:3829] write:<02090100 00000201 000002>2016-12-22 09:47:21.296 Bluetooth[193:3829] -[TableViewController peripheral:didWriteValueForCharacteristic:error:]2016-12-22 09:47:21.298 Bluetooth[193:3829] -[TableViewController peripheral:didUpdateValueForCharacteristic:error:]2016-12-22 09:47:21.299 Bluetooth[193:3829] value:<020b0100 4c000000 02004c00 03>2016-12-22 09:47:31.632 Bluetooth[193:3829] -[TableViewController centralManager:didDisconnectPeripheral:error:]2016-12-22 09:47:31.632 Bluetooth[193:3829] error:Error Domain=CBErrorDomain Code=6 "The connection has timed out unexpectedly." UserInfo={NSLocalizedDescription=The connection has timed out unexpectedly.}
0 0
- ios蓝牙使用demo
- 蓝牙4.0BLE使用demo
- iOS 蓝牙使用
- iOS 蓝牙使用小结
- iOS蓝牙使用
- IOS蓝牙使用总结
- iOS 蓝牙的使用
- ios蓝牙使用总结
- ios蓝牙使用
- iOS 蓝牙使用小结
- iOS 蓝牙使用
- iOS 蓝牙使用小结 bluetooth
- iOS 蓝牙使用小结 bluetooth
- iOS 蓝牙使用小结 bluetooth
- iOS 蓝牙使用小结 bluetooth
- iOS 蓝牙使用小结 bluetooth
- IOS蓝牙4.0简单使用
- iOS 蓝牙使用小结 bluetooth
- angular 2.0中新出现的声明方式const,let
- eclipse在异常关闭后,导致无法启动workspace问题的解决
- 【资源共享】C语言之新手常见问题集
- linux内核接口——Linux二进制兼容性问题
- datatable绑定comboBox显示数据[C#]
- ios蓝牙使用demo
- java下main,dao,model,service,impl,util包名含义
- Freemark的使用总结
- jquery遍历数组
- spark中的RDD算子
- EasyMock
- MyBatis的动态SQL详解
- Ios xcode8构建之后,validate,和update appstore为灰色解决办法
- 使用ping命令进行连通性校验的shell脚本