如何找到没有信标标识符的iBeacon?

时间:2017-03-15 23:06:41

标签: ios ibeacon uuid

我使用以下代码行创建CLBeaconRegion,然后按以下方式调用location manager

 let beaconRegion:CLBeaconRegion = CLBeaconRegion(proximityUUID: beaconUUID as UUID,
                                                                 identifier: beaconIdentifier)

///  save a beacon region for stopping after.
                (beaconInfo as! BeaconInfo).beaconRegion = beaconRegion

                ///  start monitoring the specified region.
                self.locationManager.startMonitoring(for: beaconRegion)

                ///  start calculating ranges for beacons in the specified region.
                self.locationManager.startRangingBeacons(in: beaconRegion)

位置管理员委托内的代码是:

func locationManager(_ manager: CLLocationManager,
                         didRangeBeacons beacons: [CLBeacon],
                         in region: CLBeaconRegion) {

        ///  it may be assumed no beacons that match the specified region are nearby.
        if beacons.count == 0 {
            print ("beacon.count = 0")
            return
        }
else
{
     \\executed rest of the code
}

其中beaconUUID是我的iBeacon的UUID,beaconIdentifier是标识符字符串。问题是,因为我的应用程序将检测通用iBeacons,所以我可能不知道他们的beaconIdentifier字符串(这不是UUID,只是一个标识符)。有什么方法可以将其作为通用字符串或nil(以消除依赖性)传递给它?

编辑:添加了CLLocationManager代码

2 个答案:

答案 0 :(得分:5)

不,您需要知道您正在寻找的信标的UUID。 iOS无法扫描"所有信标"。

标识符字符串只是您分配给应用中func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomCell cell.textView.attributedText = NSAttributedString.strikeThroughText(self.tasks[indexPath.row].name!) return cell } // Note - tableview is black, so the white text should be visible extension NSAttributedString { static func strikeThroughText(_ text: String ) -> NSAttributedString { let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: text) attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length)) attributeString.addAttribute(NSStrikethroughColorAttributeName, value: UIColor.white, range: NSMakeRange(0, attributeString.length)) return attributeString } } 的字符串。它与实际信标中配置的任何值无关。

所以

CLBeaconRegion

let beaconRegion:CLBeaconRegion = CLBeaconRegion(proximityUUID: beaconUUID as UUID, identifier: "someIdentifier")

将扫描同一组iBeacons;具有由let beaconRegion:CLBeaconRegion = CLBeaconRegion(proximityUUID: beaconUUID as UUID, identifier: "someOtherIdentifier")

指定的UUID的iBeacons

您可以使用标识符在以后识别信标区域,例如输入区域或您想要停止监视区域时。请记住,信号灯区域在应用程序的执行过程中保持活动状态,因此您无法依赖对象引用。

答案 1 :(得分:1)

所以问题是每个信标都需要有唯一的标识符字符串。这就是为什么我的应用程序没有检测到,因为我有一个所有信标的共同字符串。