我知道iBeacon不能在后台广播/做广告,而且我也知道中央和外围设备都不可能在后台并发现彼此。我想要做的是在后台播放,以便中央可以在前台发现应用程序。对不起,如果我不解释这个问题,如果我不清楚,请询问澄清。
我在here中看到"应用程序在后台运行而不是前景"时表现不同。在第37-38页,它描述了外围设备背景的不同之处。它提到了CBAdvertisementDataServiceUUIDsKey广告密钥的值中包含的服务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与我的非常相似;唯一的区别是他希望两个设备都能在后台运行,我只需要外设在后台工作而不是中心。
如何在后台广播然后在前台发现?
感谢您的帮助!
答案 0 :(得分:0)
不幸的是,你不能这样做。有两件事阻止这种情况发生:
作为iBeacon的应用广告和扫描其他iBeacons将无法检测到自己的传输。这不是iOS的东西,它是蓝牙的东西。蓝牙扫描不会检测源自同一设备的广告。
如果您在后台从应用程序传输iBeacon广告,它会破坏广告格式,因此不再可识别为iBeacon传输。这是由于在后台将服务uuids移动到“溢出区域”的相同iOS功能引起的。有关详细信息,请参阅here。