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

时间:2015-08-12 23:01:53

标签: swift bluetooth core-location core-bluetooth ibeacon

我知道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与我的非常相似;唯一的区别是他希望两个设备都能在后台运行,我只需要外设在后台工作而不是中心。

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

不幸的是,你不能这样做。有两件事阻止这种情况发生:

  1. 作为iBeacon的应用广告和扫描其他iBeacons将无法检测到自己的传输。这不是iOS的东西,它是蓝牙的东西。蓝牙扫描不会检测源自同一设备的广告。

  2. 如果您在后台从应用程序传输iBeacon广告,它会破坏广告格式,因此不再可识别为iBeacon传输。这是由于在后台将服务uuid​​s移动到“溢出区域”的相同iOS功能引起的。有关详细信息,请参阅here