我锁定屏幕时扫描蓝牙设备失败(使用ibeacon)

时间:2016-12-19 02:27:41

标签: ios swift bluetooth ibeacon

我做了一个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更新 我发现第一个问题更准确,当锁屏,设备靠近手机时,可以扫描,但不远处(这个距离可以在前台扫描)

所以我想如果锁定屏幕的扫描距离不准确?

1 个答案:

答案 0 :(得分:1)

  1. 您是否在Xcode项目的功能页面中打开了蓝牙的后台模式?
  2. https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html

    1. 您首先需要了解CoreBluetooth的机制。特别是你需要了解测距和监测之间的差异,以及它们在后台模式中的局限性。某些操作只能在前台模式下完成。
    2. Detecting beacons via iBeacon Monitoring & Ranging vs CoreBluetooth scanForPeripheralsWithServices

      1. didEnterRegiondidExitRegion不是实时的,退出和重新进入该区域之间有缓冲时间。此外,如果您在调用监视器功能之前已经在该区域,则不会触发didEnterRegion
      2. <强> 更新

          

        1,未打开,在尝试打开之前,或遇到同样的问题

        您需要打开它,并进行一些设置才能实现后台扫描。

          

        2,非常感谢,但我发现扫描失败了,不是每次都偶尔发生。这就是我不明白的地方。

             3,是的,我的实验是第一个离开该区域,然后进入该区域,因为我有两个信标设备在一起,UUID不同,关闭一个,然后我去扫描,然后发现有时不扫描,有时可能

        我无法找到您正在使用的蓝牙库的代码。好像是中国大陆开发商写的?你能发布那个图书馆的链接吗?

        我的exp,CoreBluetooth测距功能非常可靠。所以我猜问题是你没有打开后台模式。在“功能”标签中启用Acts as a Bluetooth LE accessoryUses Bluetooth LE accessories

        另外,我建议您阅读/标记Radius Networks的博客。他们的开发者博客值得一读。

        http://developer.radiusnetworks.com/2014/11/13/extending-background-ranging-on-ios.html