它';检测由iOS设备生成的背景信标源是可能的
我试着用一台iOS设备作为信标(比如我的iPhone5),它应该被另一台iOS设备(比如我的iPad)检测到。 当两台设备都在前台时,我的iPad能够正确检测到iPhone生成的信标信号。通过我的它';检测由iOS设备生成的背景信标源是可能的,ios,swift,ibeacon,Ios,Swift,Ibeacon,我试着用一台iOS设备作为信标(比如我的iPhone5),它应该被另一台iOS设备(比如我的iPad)检测到。 当两台设备都在前台时,我的iPad能够正确检测到iPhone生成的信标信号。通过我的didRangeBeaconsdelegate方法,我做到了 func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) {
didRangeBeacons
delegate方法,我做到了
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)]
[CLBeacon(uuid:AD065817-291B-4422-BD59-CBBFBDB81F17,大调:9,小调:6,接近度:2+/-0.81米,rssi:-56)]
当我的iPhone(信标)处于后台模式(屏幕未处于活动状态)时,我无法检测到来自iPad的任何信标信号,是否有任何解决方案?我在网上做了很多研究,但我找不到有启发性的东西。当应用程序在后台时,对信标的监控是有效的,因为iOS正在为该应用程序执行该服务。然而,只有当应用程序在前台时,测距才起作用。如果短期背景范围不够,则需要在项目设置的“功能”选项卡中启用“背景模式”选项,并在
Info.plist中使用ui背景模式设置为location
,当应用程序位于后台时,信标监控工作正常,因为iOS正在执行该操作应用程序的服务。然而,只有当应用程序在前台时,测距才起作用。如果短期背景距离不够,则需要在项目设置的“能力”选项卡中启用“背景模式”选项,并在Info.plist中使用ui背景模式设置为location
,是的,可以在背景中对信标进行距离测量。通常情况下,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。您的手机将覆盖您设置为查找的任何CLBeacon区域。我喜欢使用iBeacons进行测试,因为它提供了模拟和检测功能,尽管有很多信标模拟器应用程序,或者你可以购买一个真正的ibeacon
我会尽可能少地在背景中使用测距,因为如果使用过量,这个过程可能会消耗大量电池。尝试在不需要知道通过测距提供的接近度和RSSI等信息以节省电池寿命的情况下使用监控。是的,您可以在后台测距信标。通常情况下,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。您的手机将覆盖您设置为查找的任何CLBeacon区域。我喜欢使用iBeacons进行测试,因为它提供了模拟和检测功能,尽管有很多信标模拟器应用程序,或者你可以购买一个真正的ibeacon
我会尽可能少地在背景中使用测距,因为如果使用过量,这个过程可能会消耗大量电池。尝试在不需要知道通过测距提供的接近度和RSSI等信息以节省电池寿命的情况下使用监控。监控信标在前台和后台都能正常工作。
监测
通过监视区域,您的应用程序可以了解设备何时进入或退出该区域定义的信标范围。想象一个博物馆,两个入口安装了音频指南应用程序和信标。该应用程序正在监视包含两个信标的区域(想想:“所有入口信标”区域),并在用户进入博物馆时收到通知。然后它会启动一个通知,提醒用户音频指南功能
范围
虽然监视使您能够检测信标范围内和范围外的移动,但测距更精确。它返回范围内的信标列表,以及每个信标的估计距离。回到我们的博物馆示例:想象一个“展品附近的所有信标”区域。音频指南应用程序可以扫描此区域中的所有信标,然后检查哪个信标最近。由于每个信标都与特定的展品相关联,因此应用程序将播放与用户上下文相关的艺术品描述
仅当应用程序正在运行时,测距才起作用,这在大多数情况下意味着用户正在积极使用应用程序。这也意味着它只需要“在您使用应用程序时访问您的位置”的权限
如果您确定需要信标的持久背景范围,则需要激活应用程序的背景模式功能,特别是位置更新模式
请注意,要使StartRangBeaconRegion在后台工作,您还需要通过CLLocationManager的startUpdatingLocation启动标准位置更新(这意味着您的应用程序中需要CLLocationManager和ESTBeaconManager)
注意:在iOS 9中,还需要将CLLocationManager的allowsBackgroundLocationUpdates属性设置为true
(来自community.estimote.com)
监控信标在前台和后台都能正常工作。
监测
通过监视区域,您的应用程序可以了解设备何时进入或退出该区域定义的信标范围。想象一个博物馆,两个入口安装了音频指南应用程序和信标。该应用程序正在监视包含两个信标的区域(想想:“所有入口信标”区域),并在用户进入博物馆时收到通知。然后它会启动一个通知,提醒用户音频指南功能
范围
W