文档章节

iOS中CoreBlueTooth中蓝牙的特征与服务

不孤独的美食家
 不孤独的美食家
发布于 2016/08/02 14:59
字数 626
阅读 144
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

###开发步骤

  • 建立中心管家
// 1. 创建中心管家,并且设置代理
self.cmgr = [[CBCentralManager alloc]initWithDelegate:self queue:nil];
  • 扫描外设(discover)
// 2. 在代理方法中扫描外部设备
 /**
  *  scanForPeripheralsWithServices :如果传入指定的数组,那么就只会扫描数组中对应ID的设备
  *                                   如果传入nil,那么就是扫描所有可以发现的设备
  *  扫描完外部设备就会通知CBCentralManager的代理
  */
 - (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
    if ([central state] == CBCentralManagerStatePoweredOn) {
        [self.cmgr scanForPeripheralsWithServices:nil options:nil];
    }
}
/**
 *  发现外部设备,每发现一个就会调用这个方法
 *  所以可以使用一个数组来存储每次扫描完成的数组
 */
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI
{
    // 有可能会导致重复添加扫描到的外设
    // 所以需要先判断数组中是否包含这个外设
    if(![self.peripherals containsObject:peripheral]){
        [self.peripherals addObject:peripheral];
    }
}
  • 连接外设
/**
 *  模拟开始连接方法
 */
- (void)start
{
    // 3. 连接外设
    for (CBPeripheral *ppl in self.peripherals) {
        // 扫描外设的服务
        // 这个操作应该交给外设的代理方法来做
        // 设置代理
        ppl.delegate = self;
        [self.cmgr connectPeripheral:ppl options:nil];
    }
}
  • 扫描外设中的服务和特征
    • 服务和特征的关系

      每个蓝牙4.0的设备都是通过服务和特征来展示自己的,一个设备必然包含一个或多个服务,每个服务下面又包含若干个特征。

/**
 *  连接外设成功调用
 */
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
{
    // 查找外设服务
    [peripheral discoverServices:nil];
}
/**
 *  发现服务就会调用代理方法
 *
 *  @param peripheral 外设
 */
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
{
    // 扫描到设备的所有服务
    NSArray *services = peripheral.services;
    // 根据服务再次扫描每个服务对应的特征
    for (CBService *ses in services) {
        [peripheral discoverCharacteristics:nil forService:ses];
    }
}
  • 与外设做数据交互
    • 在指定的特征下做相应的操作
/**
 *  发现服务对应的特征
 */
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
    // 服务对应的特征
    NSArray *ctcs = service.characteristics;
    // 遍历所有的特征
    for (CBCharacteristic *character in ctcs) {
        // 根据特征的唯一标示过滤
        if ([character.UUID.UUIDString isEqualToString:@"XMG"]) {
            NSLog(@"可以吃饭了");
        }
    }
}
  • 断开连接
/**
 *  断开连接
 */
- (void)stop
{
    // 断开所有连接上的外设
    for (CBPeripheral *per in self.peripherals) {
        [self.cmgr cancelPeripheralConnection:per];
    }
}
不孤独的美食家

不孤独的美食家

粉丝 88
博文 159
码字总数 48705
作品 1
长沙
高级程序员
私信 提问
加载中
请先登录后再评论。
iOS 应用版本更新检查--Harpy

实现 app 版本检查功能。用户打开app之后,进行app的版本更新检查。如果检查到 appstore 上有当前qpp的新版本,则弹出对话框提醒用户下载。可以设置让用户选择下载或者强制用户下载。 [Code4...

匿名
2013/02/18
1.7K
0
跨平台手机应用开发--Gideros

Gideros 可以让你轻松快速创建 iOS 和 Android 应用,提供用户友好的集成开发环境,内建模拟器对应用进行不同屏幕大小、分辨率下的测试,最大的优点是可即时修改代码即时进行测试,无需编译安...

匿名
2013/02/19
2.6K
0
RESwitch

RESwitch 是 UISwitch 的开源替代品,可使用 UIAppearance 协议进行定制。 要求: Xcode 4.5 or higher Apple LLVM compiler iOS 5.0 or higher ARC...

匿名
2013/02/19
573
0
Share This

这是一个 iOS 上的分享工具,可轻松在项目中嵌入使用。每个分享的选项可独立调用。在 iOS 5 上使用 ActionSheet 显示,而 iOS 6 上使用全新的 Activity 视图控制器来显示。 iOS 6+: iOS 5:...

匿名
2013/03/03
1.8K
0
MBPullDownController

MBPullDownController 是 iOS 的一个容器视图控制,用来实现可拖拉的滚动视图接口。 MBPullDownController 允许两个视图控制器,覆盖布局,上面的一个视图可接受拖拉操作来显示后面的视图。...

匿名
2013/03/08
569
0

没有更多内容

加载失败,请刷新页面

加载更多

TensorFlow 机器学习秘籍中文第二版·翻译完成

原文:TensorFlow Machine Learning Cookbook 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则 2.3.c 在线阅读 ApacheCN 面试求职交流群 724187166 ...

布客飞龙
5分钟前
0
0
gin 怎么写个简单的中间件

gin 写个简单中间件,直接上例子: func GinServer() {engine := gin.Default()engine.Use(TestMiddleware)engine.GET("/", func(context *gin.Context) {context.JSON(http.......

is晓歌
9分钟前
0
0
查找算法——插值查找

对于有序的查找表,除了顺序查找、折半查找、斐波那契查找,还可以使用插值查找,对于元素分布较为均匀的查找表,插值查找的性能更优。不妨设想一下存在这样子的序列[10, 12, 14, 16, 18],以...

城北徐公美
12分钟前
13
0
asm 数组的双向传递

asm目前测试中比js大概能快 1.2 - 1.5倍左右 c/c++ 能快1.7 - 2.3 倍左右 asm的最大优势还是书写可以使用类似ts的语法, 比go和c系更加方便, 学习和改造已有工具的成本不大 但是性能还是问题,...

阿豪boy
17分钟前
18
0
为什么国内流行的 MyBatis ,国外 Java 工程师却不愿意使用?

Spring 团队的Josh Long自己在Twitter上做了一个调查。1625次投票,样本量不算大,但也能说明问题。和我答案最后的那些调查图表基本一致。 我们看一下Google Trends的数据: 搜索条件是这样的...

码农突围
25分钟前
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部