我尝试使用iOS设备作为信标(让我们说我的iPhone5),应该由其他iOS设备检测,让我们说(我的iPad)。
当两台设备都在前台时,我的iPad能够正确检测到我的iPhone生成的信标信号。从我的didRangeBeacons
委托方法,我做了
func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) {
if beacons.count > 0{
print(beacons)
}
}
我记录了信标信息
[CLBeacon (uuid:<__NSConcreteUUID 0x124e483b0> AD065817-291B-4422-BD59-CBBFBDB81F17, major:9, minor:6, proximity:2 +/- 0.81m, rssi:-56)]
当我的iPhone(信标)处于后台模式(屏幕未激活)时,我无法检测到来自iPad的任何信标信号,是否有针对此方案的任何解决方案?我在网上做了很多研究,但是我找不到一些有启发性的东西。
答案 0 :(得分:2)
当应用程序处于后台时,监控信标会起作用,因为iOS正在为应用程序执行该服务。但是,范围仅在应用程序位于前台时才有效。如果短期背景范围不够,则需要在项目设置的“功能”选项卡中启用“背景模式”选项,并在UIBackgroundModes
中使用location
设置为Info.plist
。
答案 1 :(得分:1)
是的,您可以在后台设置信标范围。通常情况下,iOS只允许您在转到后台后执行此操作10秒,但是,您可以使用此代码将后台唤醒时间延长至最多3分钟:
func extendBackgroundRunningTime() {
if backgroundTask != UIBackgroundTaskInvalid {
// if we are in here, that means the background task is already running.
// don't restart it.
return
}
NSLog("Attempting to extend background running time")
var self_terminate: Boolean = true
self.backgroundTask = UIApplication.sharedApplication().beginBackgroundTaskWithName("DummyTask", expirationHandler: {() -> Void in
NSLog("Background task expired by iOS")
if self_terminate != nil {
UIApplication.sharedApplication().endBackgroundTask(backgroundTask)
self.backgroundTask = UIBackgroundTaskInvalid
}
})
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {() -> Void in
NSLog("Background task started")
while true {
NSLog("background time remaining: %8.2f", UIApplication.sharedApplication().backgroundTimeRemaining)
NSThread.sleepForTimeInterval(1)
}
})
}
你实际上并不需要背景模式。您需要在info.plist中设置NSLocationAlwaysUsageDescription。您的手机将覆盖您设置的任何CLBeaconRegions。我喜欢使用this app来测试iBeacons,因为它提供了模拟和检测功能,虽然有许多信标模拟器应用,或者你可以买一个真正的ibeacon。
我会尝试尽可能少地在后台使用测距,因为如果过量,这个过程可能会耗费大量电量。尝试在您不需要了解通过范围提供的接近和RSSI等情况的情况下使用监控,以便延长电池寿命。
答案 2 :(得分:1)
监控信标在前台和后台运行良好。 监测
通过监控区域,您的应用可以了解设备何时进入或退出该区域定义的信标范围。想象一下博物馆的音频指南应用程序和两个入口安装的信标。该应用程序正在监控包含两个信标的区域(想想:“所有入口信标”区域),并在用户进入博物馆时得到通知。然后它会启动通知,提醒用户有关音频指南的功能。
测距
通过监控,您可以检测到信标范围内外的移动,而测距则更精细。它返回一个范围内的信标列表,以及每个信标的估计接近度。回到我们的博物馆示例:想象一下&#34;展览附近的所有信标&#34;区域。音频指南应用程序可以扫描该区域中的所有信标,然后检查哪个信标最近。由于每个信标都与特定的展览相关联,因此应用程序将播放与用户背景相关的艺术作品的描述。
范围仅在应用程序运行时有效,大多数时候意味着用户正在使用该应用程序。这也意味着它只需要在您使用应用程序时访问您的位置的权限即可。
如果您确定要为信标设置持久的背景范围,则需要为应用程序激活后台模式功能,特别是位置更新模式。
请注意,要使startRangingBeaconsInRegion在后台运行,您还需要通过CLLocationManager的startUpdatingLocation启动标准位置更新(意味着您的应用中需要CLLocationManager和ESTBeaconManager)。
注意:在iOS 9中,您还需要将CLLocationManager的allowsBackgroundLocationUpdates属性设置为true。
(来自community.estimote.com) https://community.estimote.com/hc/en-us/articles/203914068-Is-it-possible-to-use-beacon-ranging-in-the-background-