iOS设备iBeacon扫描总结

image

iBeacon是苹果公司提出的“一种可以让附近手持电子设备检测到的一种新的低功耗、低成本信号传送器”的一套可用于室内定位系统的协议。 这种技术可以使一个智能手机或其他装置在一个iBeacon基站的感应范围内执行相应的命令

初始化CLLocationManager和CLBeaconRegion

let locationManager = CLLocationManager()

let beaconRegion: CLBeaconRegion = {
    let region = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: "7B1C1C64-077E-4D23-9F49-7E644A13B5A9")!, identifier: "7B1C1C64-077E-4D23-9F49-7E644A13B5A9")
    region.notifyEntryStateOnDisplay = true
    return region
}()

开始扫描

func start() {
    stop()

    locationManager.delegate = self
    locationManager.startRangingBeaconsInRegion(beaconRegion)
}

实现CLLocationManagerDelegate代理方法

打印授权状态

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    if status == .AuthorizedAlways {
        print("Location Access (Always) granted!")
    } else if status == .AuthorizedWhenInUse {
        print("Location Access (When In Use) granted!")
    } else if status == .Denied || status == .Restricted {
        print("Location Access (When In Use) denied!")
    }
}

扫描到设备,accuracy实际距离

func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) {
    print(">>>发现设备: becons: \(beacons)")
    print("------------------------------")
    for bc in beacons {
        print (bc.accuracy)
    }
}

停止扫描

func stop() {
    locationManager.stopRangingBeaconsInRegion(beaconRegion)
    locationManager.delegate = nil

}

代码参考
https://github.com/jackyshan/bleIbeaconscanner/blob/master/IBeaconScanner.swift