首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用CoreBluetooth只扫描信标

如何使用CoreBluetooth只扫描信标
EN

Stack Overflow用户
提问于 2018-03-06 15:39:31
回答 1查看 2.2K关注 0票数 3

我用这个功能来扫描我周围的BLE,但是我收到的信号太多了。我只想处理来自信标的信号。

代码语言:javascript
运行
复制
func centralManagerDidUpdateState(_ central: CBCentralManager) {
    centralManager.scanForPeripherals(withServices: nil, options: [CBCentralManagerScanOptionAllowDuplicatesKey : NSNumber(value: true)])
}

我用过LightBlue发现我的信标有5个服务:180 A,FFA0,FFB0,FFF0和180 F。

然后我尝试了这段代码,但是没有在这个服务中找到外设。

代码语言:javascript
运行
复制
let serviceUUIDs = [CBUUID(string: "FFA0")]

func centralManagerDidUpdateState(_ central: CBCentralManager) {
    centralManager.scanForPeripherals(withServices: serviceUUIDs, options: [CBCentralManagerScanOptionAllowDuplicatesKey : NSNumber(value: true)])
}

而didDiscover方法从未调用过

代码语言:javascript
运行
复制
func centralManager(_ central: CBCentralManager,
                    didDiscover peripheral: CBPeripheral,
                    advertisementData: [String : Any],
                    rssi: NSNumber)
{
    if peripheral.name == "MY_BEACON_NAME" {
        print("peripheral: \(peripheral)")
        print("rssi = \(rssi)")
    }
}

我做错什么了?

我不能在这个项目中使用CoreLocation,只有CoreBluetooth。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-06 17:26:56

根据您的硬件信标是什么类型的信标格式广告,可能无法检测到与CoreBluetooth。CoreBluetooth可以检测Eddystone格式和AltBeacon格式,但不能检测iBeacon格式。

有几点需要理解:

  1. 信标格式不一定包括关贸总协定服务UUID,这是您在使用代码行centralManager.scanForPeripherals(withServices: serviceUUIDs ...时过滤的内容。虽然Eddystone广告确实包括服务UUID,但iBeacon和AltBeacon并不是因为它们是另一种叫做制造商广告的BLE广告。只有GATT广告有服务UUID。
  2. Eddystone格式使用FEAA服务UUID,您可以使用描述的技术来筛选此信标类型。
  3. 您只能在没有AltBeacon筛选器的情况下检测serviceUUID广告,因为它没有。
  4. 永远不会用CoreBluetooth检测iBeacon,因为苹果有特殊的代码过滤器阻止他的API接收这些广告。您别无选择,只能使用CoreLocation来检测iOS上的iBeacon。
  5. 许多信标硬件制造商也包括一些附加的GATT服务,它们有自己的服务UUIDS。这些服务执行诸如配置或添加操作之类的功能。但是,这与信标功能无关,也无法知道这些Service何时(如果有的话)进行广告宣传,如果是的话,这意味着什么。这些UUID在不同的信标制造商之间是绝对不同的。被LightBlue检测到的服务UUID可能是补充服务,因此它们根本无助于解决这个问题。

底线:没有一种简单的方法可以使用CoreBluetooth来过滤你想要的信标。您最好的选择是在CoreBluetooth上编写自己的过滤软件,而忽略您不关心的数据包。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49134666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档