有没有办法在iOS设备的当前位置周围定义地理围栏(中心和半径),并让设备在设备退出地理围栏时触发我的应用程序中的回调功能?这种机制会唤醒一个封闭的应用吗?
我希望避免广泛的GPS使用,所以我更倾向于使用定期GPS轮询的系统信息,即使是以降低的准确性为代价。
答案 0 :(得分:4)
您的解决方案是Region Monitoring。
在iOS中,始终跟踪与您的应用相关联的区域, 包括你的应用程序没有运行时。如果是区域边界 当应用程序未运行时交叉,该应用程序将重新启动 处理事件的背景。同样,如果应用程序被暂停 当事件发生时,它被唤醒并给予少量 处理事件的时间(大约10秒)。
每当应用程序请求进行区域监控时,iOS都会采用支持。您的应用程序注册了一些位置,并要求iOS监控该区域&在准确准确地进入或离开该区域时通知。
像
CLRegion *region = [[CLCircularRegion alloc] initWithCenter:[location coordinate] radius:250.0 identifier:[[NSUUID UUID] UUIDString]];
现在iOS接受此请求&使用内部标识将其添加到区域监控的系统队列中。一旦设备进入该区域或退出该区域,iOS就会向应用程序发送通知以启动解雇代表。
-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
请注意,如果您的应用在后台运行,一旦设备进入/存在注册区域,iOS将使您的应用在后台启动。
这是FourSquare
&的关键点之一。其他类似的应用程序trie执行大量的位置数据收集和将其发送到服务器&在很短的时间内为用户提供量身定制的消息。
答案 1 :(得分:3)
Apple documentation for Region Monitoring
Perfect tutorial which teaches you to build a geo fence step by step in ios
以下是用户进入和退出某个区域时触发的委托方法!
-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
NSLog(@"Welcome to %@", region.identifier);
}
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
NSLog(@"Bye bye");
}
-(void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
NSLog(@"Now monitoring for %@", region.identifier);
}