我做了一个ibeacon项目,现在我发现了两个问题: 首先,当手机锁屏时,我要扫描蓝牙设备(我肯定在信标区域),有时扫描失败并返回空阵列 第二,当我锁定屏幕时,有时didEnterRegion和didExitRegion已经停止,当我是屏幕之光时,它们再次亮相
现在我想在每次锁定屏幕时扫描设备,我该怎么办?
MonitoringForRegions代码:
let region = BRTBeaconRegion.init(proximityUUID: proxiID, identifier: proxiID.UUIDString)
region.notifyOnEntry = true
region.notifyOnExit = true
region.notifyEntryStateOnDisplay = true
BRTBeaconSDK.startMonitoringForRegions(region)
Appdelegate委托代码:
func beaconManager(manager:BRTBeaconManager,didEnterRegion region:BRTBeaconRegion){
if region.notifyOnEntry {
//PublicMethod().sendLocalNotification(BEACON_TIP_IN)
print("\(NSDate())-------enter--------")
}
}
func beaconManager(manager:BRTBeaconManager,didExitRegion region:BRTBeaconRegion){
if region.notifyOnExit {
//PublicMethod().sendLocalNotification(BEACON_TIP_OUT)
print("\(NSDate())-------exit--------")
}
}
func beaconManager(manager:BRTBeaconManager,didDetermineState state:CLRegionState,forRegion region:BRTBeaconRegion){
print("didDetermineState")
}
扫描码:
BRTBeaconSDK .startRangingBeaconsInRegions(regionArray) { (beacons, region, error ) in
for beacon in beacons as! [BRTBeacon]{
print("beacons count:\(beacons.count) name :\(beacon.name) macaddress:\(beacon.macAddress) major:\(beacon.major) minor:\(beacon.minor) ")
}
}
在14:25更新 我发现第一个问题更准确,当锁屏,设备靠近手机时,可以扫描,但不远处(这个距离可以在前台扫描)
所以我想如果锁定屏幕的扫描距离不准确?
答案 0 :(得分:1)
Detecting beacons via iBeacon Monitoring & Ranging vs CoreBluetooth scanForPeripheralsWithServices
didEnterRegion
和didExitRegion
不是实时的,退出和重新进入该区域之间有缓冲时间。此外,如果您在调用监视器功能之前已经在该区域,则不会触发didEnterRegion
。<强> 更新 强>
1,未打开,在尝试打开之前,或遇到同样的问题
您需要打开它,并进行一些设置才能实现后台扫描。
2,非常感谢,但我发现扫描失败了,不是每次都偶尔发生。这就是我不明白的地方。
3,是的,我的实验是第一个离开该区域,然后进入该区域,因为我有两个信标设备在一起,UUID不同,关闭一个,然后我去扫描,然后发现有时不扫描,有时可能
我无法找到您正在使用的蓝牙库的代码。好像是中国大陆开发商写的?你能发布那个图书馆的链接吗?
我的exp,CoreBluetooth测距功能非常可靠。所以我猜问题是你没有打开后台模式。在“功能”标签中启用Acts as a Bluetooth LE accessory
和Uses Bluetooth LE accessories
。
另外,我建议您阅读/标记Radius Networks
的博客。他们的开发者博客值得一读。
http://developer.radiusnetworks.com/2014/11/13/extending-background-ranging-on-ios.html