gpt4 book ai didi

swift - 如何在后台广播蓝牙信号,然后在 Swift 中运行前台时发现该设备?

转载 作者:行者123 更新时间:2023-11-30 14:08:59 25 4
gpt4 key购买 nike

我知道 iBeacon 不能在后台广播/广告,我也知道中央和外围设备不可能同时在后台并互相发现。我想做的是在后台广播,以便中央可以在前台发现该应用程序。如果我没有很好地解释这一点,我很抱歉,如果我不清楚,请要求澄清。

我读到 here 说“应用程序在后台运行时的执行方式与在前台运行时不同”。第 37-38 页描述了外围设备背景的不同之处。它提到“CBAdvertisementDataServiceUUIDsKey 广告 key 值中包含的服务 UUID 被放置在特殊的“溢出”区域中;它们只能由显式扫描它们的 iOS 设备发现。”什么是溢出区域以及如何显式搜索设备?我所需要的只是主要/次要值和 RSSI。我不想连接到外围设备,我只想与它交互,就好像它是 iBeacon 一样。

此外,我需要能够发现多个设备(所有设备都具有相同的 UUID),但都具有唯一的主要/次要值。

这是我的代码:

var locationManager: CLLocationManager!
var beaconRegion: CLBeaconRegion!
var centralManager: CBCentralManager!

override func viewDidLoad() {

locationManager = CLLocationManager()
locationManager.delegate = self
centralManager.delegate = self

let majorVal: CLBeaconMajorValue = 123
let minorVal: CLBeaconMinorValue = 456

let uuid = NSUUID(UUIDString: "00000000-0000-0000-0000-000000000000")
beaconRegion = CLBeaconRegion(proximityUUID: uuid,identifier: "beacon")

locationManager.startRangingBeaconsInRegion(beaconRegion)
locationManager.startUpdatingLocation()
}

然后我只需处理到信标的距离并记录它的主要/次要值。

This question 和我的很相似;唯一的区别是他希望两个设备都在后台工作,而我只需要外围设备在后台工作而不是中央设备。

如何在后台广播然后在前台发现?

感谢您的帮助!

最佳答案

不幸的是,你不能这样做。有两件事阻止了它的工作:

  1. 作为 iBeacon 进行广告并扫描其他 iBeacon 的应用程序不会检测到自己的传输。这不是 iOS 的事情,而是蓝牙的事情。蓝牙扫描不会检测来自同一设备的广告。

  2. 如果您从后台应用程序传输 iBeacon 广告,则会破坏广告格式,因此它不再被识别为 iBeacon 传输。这是由相同的 iOS 功能引起的,该功能在后台时将服务 uuid 移动到“溢出区域”。请参阅here了解更多信息。

关于swift - 如何在后台广播蓝牙信号,然后在 Swift 中运行前台时发现该设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31976839/

25 4 0
文章推荐: javascript - 加载事件未触发 标记