文档章节

iOS 蓝牙使用小结 bluetooth

海二少
 海二少
发布于 2017/05/20 16:36
字数 732
阅读 19
收藏 0
demo下载 http://download.csdn.NET/detail/swibyn/9717588
直接看代码 http://blog.csdn.Net/swibyn/article/details/53785249
首先推荐去看官方文档哦

现将创建蓝牙工程的要点总结一下,由于工程主要涉及中心模式,所以只总结中心模式的用法
1,引入CoreBluetooth.framework
2,实现蓝牙协议,如:
.h文件如下
@protocolCBCentralManagerDelegate;
@protocolCBPeripheralDelegate;

@interface ViewController :UIViewController <CBCentralManagerDelegate,CBPeripheralDelegate>

.m文件如下
#import "CoreBluetooth/CoreBluetooth.h"
另外还有代理部分请自行添加

3,下面是使蓝牙动起来的过程
3.1创建CBCentralManager实例
    self.cbCentralMgr = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
设置代理,比如:
    self.cbCentralMgr.delegate =self;

创建数组管理外设
    self.peripheralArray = [NSMutableArrayarray];

3.2扫描周围的蓝牙
实际上周围的蓝牙如果可被发现,则会一直往外发送广告消息,中心设备就是通过接收这些消息来发现周围的蓝牙的

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

3.3发现一个蓝牙设备
也就是收到了一个周围的蓝牙发来的广告信息,这是CBCentralManager会通知代理来处理
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
}
如果周围的蓝牙有多个,则这个方法会被调用多次,你可以通过tableView或其他的控件把这些周围的蓝牙的信息打印出来
3.4连接一个蓝牙
[self.cbCentralMgr connectPeripheral:peripheral options:nil];
一个中心设备可以同时连接多个周围的蓝牙设备
当连接上某个蓝牙之后,CBCentralManager会通知代理处理

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

因为在后面我们要从外设蓝牙那边再获取一些信息,并与之通讯,这些过程会有一些事件可能要处理,所以要给这个外设设置代理,比如:
peripheral.delegate =self;
3.5查询蓝牙服务
[peripheral discoverServices:nil];
返回的蓝牙服务通知通过代理实现
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
{

   for (CBService* service in peripheral.services){
        
    }
}
3.6查询服务所带的特征值
[peripheral discoverCharacteristics:nil forService:service];
返回的蓝牙特征值通知通过代理实现
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
    
   for (CBCharacteristic * characteristic in service.characteristics) {
    }
}
3.7给蓝牙发数据
[peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
这时还会触发一个代理事件
- (void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
}
3.8处理蓝牙发过来的数据
一种方法是主动读取数据,不过更好的办法是设置事件通知。
[peripheral setNotifyValue:YES forCharacteristic:characteristic];
这样当有数据时会自动触发代理事件
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
}

3.9 retrievePeripheralsWithIdentifiers使用例子
-(IBAction) Retrieve:(id)Sender
{
    [self.tvLogsetText:@""];
    NSMutableArray * Identifiers = [NSMutableArray array];
   for (CBPeripheral * peripheral in self.peripheralArray) {
        [Identifiers addObject: peripheral.identifier];
    }

    [self addLog:@"[self.cbCentralMgr retrievePeripheralsWithIdentifiers:self.PeripheralIdentifiers]"];
    self.retrievePeripherals = [self.cbCentralMgr retrievePeripheralsWithIdentifiers:Identifiers];
   for (CBPeripheral* peripheral in self.retrievePeripherals) {
        [self addLog:[NSString stringWithFormat:@"%@ name:%@",peripheral,peripheral.name]];
    }
    [self.tableViewPeripheral reloadData];
}

3.10 retrieveConnectedPeripheralsWithServices使用例子

-(IBAction) Retrieve:(id)Sender
{
    [self.tvLog setText:@""];
    NSMutableArray * services = [NSMutableArray array];
   for (CBPeripheral * peripheral in self.peripheralArray) {
       if (peripheral.isConnected) {
           for (CBService *service in peripheral.services) {
                [services addObject:service.UUID];
            }
        }
    }
    
    [self addLog:@"[self.cbCentralMgr retrieveConnectedPeripheralsWithServices:peripheral.services]"];
    self.retrievePeripherals = [self.cbCentralMgr retrieveConnectedPeripheralsWithServices:services];
   for (CBPeripheral* peripheral in self.retrievePeripherals) {
        [self addLog:[NSString stringWithFormat:@"%@ name:%@",peripheral,peripheral.name]];
    }
    [self.tableViewPeripheral reloadData];
}

 

本文转载自:http://blog.csdn.net/swibyn/article/details/20531593

海二少
粉丝 0
博文 87
码字总数 48854
作品 0
程序员
私信 提问
Unity免费插件分享 Bluetooth LE for iOS, tvOS and Android 2.3.0 Unity蓝牙插件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/KiTok/article/details/83177703 Unity免费插件分享 Bluetooth LE for iOS, tvOS and Android 2.3.0 Unity蓝牙...

KitStar
2018/10/19
0
0
实战分享,教你蓝牙在小程序中的应用

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:朱胜 导语 蓝牙在日常生活中广泛使用的一项技术,小程序给了我们前端工程师一个控制蓝牙的方法,带上你的设备,来看看怎...

腾讯云开发者社区
2017/10/23
80
0
为开发者打造其专属蓝牙SDK

BtSDK(www.btsdk.com)是一个为开发者打造其专属蓝牙SDK的平台。在这里开发者既可以添加蓝牙技术联盟 - SIG(Bluetooth Technology Special Interest Group)已经采纳的标准协议接口,也可以添...

btsdk
2015/12/04
2
0
Google正为Chromebook配件外设提供蓝牙电池指示功能

Google正在努力为Chromebook配件添加蓝牙电池指示,这目前是Android和iOS上的一项功能,是可以帮助用户迅速了解蓝牙配件的电池续航以及是电池否耗尽的一种方式。如果你正在使用AirPods,Pix...

稿源:
06/30
0
0
iOS发出蓝牙指令无法收到正确响应,但是相同蓝牙指令在安卓下可收到正常响应

【业务需求】 我们有一个自己设计生产的的蓝牙模块, 通过BLE(低功耗蓝牙)和手机通信。 目前在安卓上测试,手机发出指令后可以收到蓝牙模块的正确响应数据, 但是在iOS上发出指令后无法收到...

herozhang
2017/01/16
91
3

没有更多内容

加载失败,请刷新页面

加载更多

实战项目-学成在线(一)

之前看的黑马程序员实战项目之一,打算以博客的形式写出来,也让自己重新温习一下。 1、项目背景 略(就是当前这东西很火,我们重点在开发,这些就略过) 2、功能模块 门户,学习中心,教学管...

lianbang_W
41分钟前
5
0
基于Vue的数字输入框组件开发

本文转载于:专业的前端网站➫基于Vue的数字输入框组件开发 1、概述 Vue组件开发的API:props、events和slots 2、组件代码 github地址:https://github.com/MengFangui/VueInputNumber 效果:...

前端老手
49分钟前
4
0
百度地图根据经纬度获取运动轨迹

<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0, user-scalable=n......

泉天下
51分钟前
5
0
学习记录(day04-axios增删改查、v-for循环、页面加载成功处理函数)

[TOC] 1.1 基本语法:插值表达式 <template> <div> {{username}} <br/> {{1+2+3}} <br/> {{'你的名字是:' + username}} <br/> {{'abc'.split('')}} </div><......

庭前云落
今天
5
0
CentOS Linux 7上将ISO映像文件写成可启动U盘

如今,电脑基本上都支持U盘启动,所以,可以将ISO文件写到U盘上,用来启动并安装操作系统。 我想将一个CentOS Linux 7的ISO映像文件写到U盘上,在CentOS Linux 7操作系统上,执行如下命令: ...

大别阿郎
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部