iOS的蓝牙用到了  CoreBluetooth 框架

首先导入框架

#import <CoreBluetooth/CoreBluetooth.h>

我们需要一个管理者来管理蓝牙设备,CBCentralManager

首先创建管理者

self.manager = [[CBCentralManager alloc]initWithDelegate:self queue:nil options:nil];

这里只需要设置一个代理,队列根据需求来选择,这里用了nil 就是默认在主线程。options是筛选设备的条件。

创建完管理者后  会执行代理方法

- (void)centralManagerDidUpdateState:(CBCentralManager *)central

可以查看manager的一个属性 : state  来识别蓝牙的状态 ,该属性是一个枚举值  CBCentralManagerState

typedef NS_ENUM(NSInteger, CBCentralManagerState) {

CBCentralManagerStateUnknown = 0,   初始的时候是未知的(刚刚创建的时候)

CBCentralManagerStateResetting,   正在重置状态

CBCentralManagerStateUnsupported,   设备不支持的状态

CBCentralManagerStateUnauthorized,      设备未授权状态

CBCentralManagerStatePoweredOff,    设备关闭状态

CBCentralManagerStatePoweredOn,    设备开启状态 -- 可用状态

};

如果是处于  CBCentralManagerStatePoweredOn  状态,那么就可以开始搜索设备   [self.managerscanForPeripheralsWithServices:nil options:nil];

可以设置一个计时器 在一段时间后停止搜索,避免耗电 [self.manager stopScan];

如果搜索到了设备,那么会调用代理方法

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI

其中 peripheral是搜索到的设备,advertisementData是关于设备的一些信息,RSSI是设备的信号强度

可以根据 advertisementData 里面的 kCBAdvDataServiceUUIDs 的值 UUID来筛选某种设备

搜索到设备后就可以进行连接了,蓝牙4.0支持一对多连接。

连接设备    [self.manager connectPeripheral:peripheral options:nil];

连接成功后 会执行代理方法

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

如果需要断开某个设备,则调用方法  [self.manager cancelPeripheralConnection:peripheral];

设备不管是自己断开还是手动断开,都会调用代理方法

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

在这里可以判断一下,如果不是手动断开的连接,则可以再连接断开的设备,实现断开设备自动连接的功能

CBCentralManager就是用来做以上这些事情的,要给设备发送数据和接受数据 则要用到 CBPeripheral

首先设置设备的代理

peripheral.delegate = self;

然后开始搜索设备服务    [peripheral discoverServices:nil];

搜索成功后会执行代理方法

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

在这里 设备的 services 属性里面就有设备服务的数据了,可以遍历这个数组来匹配到我们需要的服务,这个一般跟硬件厂商协商,这里我们假如需要UUID为FF00的服务

如果成功匹配到服务,那么调用方法    [peripheral discoverCharacteristics:nil forService:s];

成功后会执行代理方法

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

在这个方法里面,服务的属性 characteristics ,会是一组的 CBCharacteristic,是服务的一些特征,在这里,我们假设发送数据需要用到特征的UUID为 FF02

发送的数据为  550504010101AA,我们将其转换为 NSData 类型 调用方法   [peripheral writeValue:dataforCharacteristic:c type:CBCharacteristicWriteWithoutResponse]  将数据发送给设备

发送成功后会执行代理方法

- (void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error

如果是读取设备的数据 那么使用方法  [peripheral readValueForCharacteristic:c] ,读取数据后会执行代理方法

- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic*)characteristic error:(NSError *)error

iOS蓝牙4.0的更多相关文章

  1. iOS蓝牙BLE4.0通信功能

    概述 iOS蓝牙BLE4.0通信功能,最近刚学的苹果,为了实现蓝牙门锁的项目,找了一天学习了下蓝牙的原理,亲手测试了一次蓝牙的通信功能,结果成功了,那么就把我学习的东西分享一下. 详细 代码下载:ht ...

  2. iOS蓝牙4.0开发

    文/starfox寒流(简书作者)原文链接:http://www.jianshu.com/p/974d165f78b5著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. iOS 蓝牙4.0 ...

  3. iOS 蓝牙4.0开发

    背景: 1.iOS的蓝牙不能用来传输文件.2.iOS与iOS设备之间进行数据通信,使用gameKit.framework3.iOS与其他非iOS设备进行数据通信,使用coreBluetooth.fra ...

  4. iOS蓝牙4.0协议简单介绍

    iOS开发蓝牙4.0的框架是CoreBluetooth,本文主要介绍CoreBluetooth的使用,关于本文中的代码片段大多来自github上的一个demo,地址是myz1104/Bluetooth ...

  5. https://github.com/coolnameismy/BabyBluetooth github上的一个ios 蓝牙4.0的库并带文档和教程

    The easiest way to use Bluetooth (BLE )in ios,even bady can use. 简单易用的蓝牙库,基于CoreBluetooth的封装,并兼容ios和 ...

  6. CoreBluetooth——IOS蓝牙4.0使用心得

    原文链接:http://m.blog.csdn.net/article/details?plg_nld=1&id=51014318&plg_auth=1&plg_uin=1&a ...

  7. iOS蓝牙4.0开发(BLE)

    智能设备 和 app 通过 BLE通讯的两种模型 模型一:设备提供数据,app 展示数据: 比如小米手环 模型二:app提供数据,设备接收: 模型与corebluetooth的对应关系: 模型一:智能 ...

  8. iOS蓝牙4.0开发例子

    1建立中心角色 1 2 3 #import <CoreBluetooth/CoreBluetooth.h>  CBCentralManager *manager;  manager = [ ...

  9. IOS BLE蓝牙4.0

    前言: 自己做的项目里面有这么一个功能,总结归纳一下. 先导入必要的框架  CoreBluetooth.framework 在要用到蓝牙的文件里面导入以下头文件 #import <CoreBlu ...

随机推荐

  1. 【开源一个小工具】一键将网页内容推送到Kindle

    最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zh ...

  2. PHP基础OOP(二) 多态

    PHP 基础  多态  ====================多态是一种思想:从一个基类中派生,响应一个虚命令,产生不同的结果.                不同的对象执行相同的方法而产生不同的行 ...

  3. Mac Mini中添加VNC访问

    开启Mac Mini上面的VNC. 1) 打开“系统偏好设置”(System Preference),双击打开“共享”(Sharing)项. 2)在左侧将“屏幕共享”(Screen sharing) ...

  4. CentOS 6.5 zabbix 3.0.4 监控MySQL性能

    安装mysql [root@test3 /]# yum -y install mysql mysql-server 初始化数据库 [root@test3 /]# /etc/init.d/mysqld ...

  5. Android学习笔记(十一)——ListView的使用(下)

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! ListView 这个控件比较复杂, 就是因为它有很多的细节可以优化,下面我们在试试提高它的运行效率:一.提高 ...

  6. View的3种测量模式

    EXACTLY:表示设置了精确的值,一般当childView设置其宽.高为精确值.match_parent时,ViewGroup会将其设置为EXACTLY: AT_MOST:表示子布局被限制在一个最大 ...

  7. ImageView显示网络图片

    package com.example.urlimage; import java.io.InputStream; import java.net.HttpURLConnection; import ...

  8. Java实现读取文件夹下(包括子目录)所有文件的文件名

    在编程的过程中,经常会用到对文件的读写操作等.比如,找出某一个文件夹下的所有文件名等. 下面的程序给出了,获取某一给定文件夹下所有文件的绝对路径的程序.可以作为某一个模块,在需要的时候直接使用. pa ...

  9. OS X 添加环境变量

    这个方法相对靠谱,可用: 1, cd 到home 2, touch .bash_profile 3,open -e .bash_profile 把各个路径按如下填写: export PATH=${PA ...

  10. 阻止a标签默认跳转事件

    1:<a href="####"></a> 2:<a href="javascript:void(0)"></a> ...