十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
iOS 蓝牙开发(二)
专注于为中小企业提供成都网站制作、成都网站建设、外贸营销网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业黔西免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
iOS 蓝牙开发(三)
iOS 蓝牙开发(四)
在iOS中蓝牙相关实现都是在CoreBluetooth这个framework中的,所以我们创建一个单例类中需要先导入 #import CoreBluetooth/CoreBluetooth.h ,再后即可使用这个单例类进行管理我们蓝牙的扫描、连接、状态等实现。
当 central.state 为CBManagerStatePoweredOn即可开始扫描, 具体方法 [self.centralManager scanForPeripheralsWithServices:nil options:nil] 当调用 scanForPeripheralsWithServices:options: 函数时就会实时调用其代理方法 - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
peripheral 是外设类 advertisementData 是广播的值,一般携带设备名, serviceUUID 等信息。 RSSI 绝对值越大,表示信号越差,设备离的越远。如果想装换成百分比强度, (RSSI+100)/1001 (这是一个约数,蓝牙信号值并不一定是-100 - 0的值)
蓝牙的连接是当中心设备扫描到可用外设后, 利用函数 [self.centralManager connectPeripheral:peripheral options:nil]; 进行链接, 当函数被调用后, 就会回调其对应的代理函数。
本篇笔记主要是记录如何初始化蓝牙的 CBCentralManager 的中心管理类,并记录如何实现扫描周边外设、如何链接、获取蓝牙当前状态。
首先还是要给手柄写上您IOS设备的蓝牙地址 以IPAD 为例以下是如何查看自己蓝牙地址
在电脑上下载一个蓝牙地址写入工具 在PC端安装Sixaxis pair tool 下载好之后安装在开始菜单里找到
Sixaxis pair tool 打开并且把PS3手柄通过USB数据线连接到电脑的USB接口开始写入蓝牙地址
蓝牙地址写好之后在手机上运行 PS3手柄控制器 软件就可以使用PS3手柄了哦 IOS7的越狱用户 需要在 cydia里添加一个源 apt.178.com添加之后在里面去下载一个叫做 controllers for all的插件 这个插件的功能就是能把PS3手柄模拟成苹果认证的MIF手柄 MIF手柄罗技的可是要800多一个啊
有两个依赖包 cydia改开发者模式,依次安装
btstack
springboardaccess
安装好这两个后再把下边附件上传ifile里安装,或者添加里免费Controllers for All,此源容易抽风,
在电脑装SixaxisPairToolSetup好修改蓝牙ID软件,请无视360的报毒提醒,这个是修改PS3蓝牙手柄ID必须的。查看一下IPAD的蓝牙ID地址,在通用-主机信息就可以看到跟WIFI的ID只差一个数。然后插PS3手柄电脑上打开SixaxisPairTool就会看到原来手柄的蓝牙ID地址其实是你的PS3主机蓝牙地址。这时候输入IPAD的地址进PS3手柄才能和IPAD配对上,确认输入完毕在IPAD打开支持手柄的游戏。
任务栏会有推送 ,按PS3手柄的PS小圆点按键配对成功 撸吧少年
GAP(Generic Access Profile):它用来控制设备连接和广播,GAP 使你的设备被其他设备可见,并决定了你的设备是否可以或者怎样与合同设备进行交互。
GATT(Generic Attribute Profile):BLE连接都是建立在GATT协议之上的。GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。
BLE中主要有两个角色:外围设备(Peripheral)和中心设备(Central)。一个中心设备可以连接多个外围设备,一个外围设备包含一个或多个服务(services),一个服务包含一个或多个特征(characteristics)。
使用CoreBluetooth库,创建CBPeripheralManager,实现CBPeripheralManagerDelegate代理
创建完该对象,会回调peripheralManagerDidUpdateState:方法判断蓝牙状态,蓝牙可用,给外设配置服务和特征
注意CBAttributePermissions
当中心设备读写设置CBAttributePermissionsReadEncryptionRequired/CBAttributePermissionsWriteEncryptionRequired权限的Characteristic时,会弹出弹框,请求建立安全连接
给外设配置服务特征后,会调用peripheralManager:didAddService:error: 服务特征全部添加完后发起广播,如果在广播时设置CBAdvertisementDataServiceUUIDsKey,会把该service广播出去,中心设备在扫描时可根据该uuid找到该设备。外围设备靠不断发广播,使中心设备发现它。
当中央端连接上了此设备并订阅了特征时会回调 didSubscribeToCharacteristic:
当接收到中央端读的请求时会调用didReceiveReadRequest:
创建CBCentralManager对象,实现CBCentralManagerDelegate代理
回调centralManagerDidUpdateState:代理方法,当central.state==CBManagerStatePoweredOn时,开启扫描,设置serviceUUIDs可扫描特定外设,CBCentralManagerScanOptionAllowDuplicatesKey设为NO不重复扫描已发现设备,YES是允许
扫描到设备会回调centralManager:didDiscoverPeripheral:advertisementData:RSSI:,RSS绝对值越大,表示信号越差,设备离的越远
关闭扫描
连接设备
发现服务
发现特征