AGLocationDispatcher 0.1.0

AGLocationDispatcher 0.1.0

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
发布最后发布2017年3月

Vermilllionkalamaznikmitusha维护。



  • Agilie

调度器提供对 iOS 设备位置/后台位置/跟踪等易于使用的访问权限。它封装了 CoreLocation,并提供了一个方便的、高度定制的接口。调度器的跟踪当前用户位置的类、直接和反向地理编码、跟踪进出区域、记录用户路线和速度。

使用方法

要运行示例项目,请克隆仓库,并首先从 Example 目录运行 pod install

添加所需的 .plist 条目

由于 iOS 8,您需要定义一个在位置授权请求时将呈现给用户的消息。您应该在您应用程序的 *-Info.plist 文件中定义此消息。根据您请求的位置更新模式添加以下至少一个键:

NSLocationWhenInUseUsageDescription 或 NSLocationAlwaysUsageDescription

确保您已将此键添加到正确的 .plist 文件中(常见错误是将它添加到 test-Info.plist 中),并将适当的消息文本作为值添加。

跟踪用户位置

要开始跟踪位置,请使用默认初始化程序初始化 AGLocationDispatcher 或 AGRouteDispatcher 以进行标准设置
(默认更新间隔 - 1 分钟,水平精度 - 100 米)

您还可以使用以下初始化程序自定义服务:

initWithUpdatingInterval: 和DesiredAccuracy

示例应用程序

AGGeoBackgroundDemo.xcodeproj

Demo Demo

这是一个简单的应用程序,它显示当前设备位置(并使用这些数据进行一些操作)在后台应用程序状态中。该应用程序识别位置,并在位置发生显著变化时(约 1000 英尺)或当应用程序处理来自 iOS 的获取操作时(10-15 分钟间隔)显示此信息。在后台模式下,应用程序可以在时间限制内识别位置(以及将位置发送到服务器或保存到 coredata)。我们的 AGBackgroundLocationDispatcher 类通过一个简单的 API 集成位置方法。(见 AppDelegate.m)。

附加信息:1 重大位置 2 背景获取

AGGeoCodeDemo.xcodeproj

Demo

展示我们提出的简单封装方法,用于多提供者地理编码服务。应用程序可以显示地理编码(地址到位置)和反向地理编码(位置到地址),并可以从我们的列表中选择提供者(Yandex、Google、Apple)。

AGGeoRegionTrackingDemo.xcodeproj

Demo

此演示应用程序显示用户进入/退出选定区域时(直径为100米)。用户可以通过拖动绿色圆形选择区域,启动跟踪此区域(底部开始按钮),在地图上跟踪您的位置,并在进入或退出区域时接收通知。只需停止跟踪当前区域并选择另一个区域即可。玩得开心!P.S.如要模拟位置跟踪:在Xcode底部栏中轻触“模拟位置”图标,并在开始应用程序或转到方案>编辑方案时选择“New York City Marathon”,然后在默认位置列表中选择“New York City Marathon”。

AGGeoTrackingDemo.xcodeproj

Demo

此演示应用程序可以跟踪您的当前位置,记录您的路线,显示您的当前平均速度和距离。您还可以保存您的路线并在以后查看它们。除此之外,您可以选择3种位置标记样式之一。只需轻触“开始录制”按钮然后继续。您将看到当前路线以绿色线条绘制。按下“停止并保存”,然后通过轻触“保存的路线”按钮转到保存的路线屏幕。在这里,您可以查看最后保存的路线。您可以通过在底部轻触“保存的路线”按钮来选择任何路线。玩得开心!

P.S.如要模拟位置跟踪:在Xcode底部栏中轻触“模拟位置”图标,并在开始应用程序或转到方案>编辑方案时选择“New York City Marathon”,然后在默认位置列表中选择“New York City Marathon”。

示例

AGRouteDispatcher *routeDisptcher = [AGRouteDispatcher initWithUpdatingInterval:kDefaultLocationTimeIntervalUpdateOneMinute andDesiredAccuracy:kAGHorizontalAccuracyThresholdBlock]

在viewcontroller的模块中,您可以使用此方法与块一起使用

- (void)startUpdatingLocationWithBlock: errorBlock:
- (void)startUpdatingLocationAndSpeedWithBlock: errorBlock:
- (void)requestUserLocationWhenInUseWithBlock:
- (void)requestUserLocationAlwaysWithBlock:
- (void)currentLocationWithBlock: errorBlock:

初始化和获取

+ (BOOL)locationServicesEnabled;
+ (BOOL)significantLocationChangeMonitoringAvailable;

- (instancetype)init;
- (instancetype)initWithUpdatingInterval:(NSTimeInterval)interval andDesiredAccuracy:(CLLocationAccuracy)horizontalAccuracy;
- (CLLocationManager *)locationManager;
- (CLLocationAccuracy)horizontalAccuracyThreshold;

在后台跟踪用户位置

AGLocationDispatcher允许根据应用程序信息property list配置和locationUpdateBackgroundMode设置(默认为AGLocationBackgroundModeSignificantLocationChanges模式)多种后台位置方法。当应用程序挂起或终止时,您需要使用特殊后台位置封装器:AGBackgroundLocationDispatcher(请参阅示例AppDelegate方法)。

后台位置模式

  • 无后台位置模式:当应用程序进入后台时,位置更新将停止。在应用程序再次成为活动状态后,位置更新将再次激活。将locationUpdateBackgroundMode属性(AGLocationDispatcher对象)设置为AGLocationBackgroundModeForegroundOnly状态;

  • 始终激活:需要UIBackgroundModes "location"键,应用程序永远不会挂起,位置精度和电池率将是最大值,无需额外代码。将locationUpdateBackgroundMode属性(AGLocationDispatcher对象)设置为除AGLocationBackgroundModeForegroundOnly以外的任何状态;

  • 显著位置模式:当应用程序被终止/挂起时工作,提供GPS级精度(超过500米的位置变化)和非常低能耗的位置更新。需要UIBackgroundModes "location"键和实现特殊处理程序(基于AGBackgroundLocationDispatcher封装器)的应用程序代理代码(请参阅示例appDelegate方法didFinishLaunchingWithOptions)。将locationUpdateBackgroundMode属性(AGLocationDispatcher对象)设置为AGLocationBackgroundModeSignificantLocationChanges状态;

  • 基于检索的位置模式:当应用程序挂起时工作,提供正常精度和非常适中的能耗位置更新,但在设备解锁/激活时激活。需要UIBackgroundModes "fetch"键和实现特殊处理程序(基于AGBackgroundLocationDispatcher封装器)的应用程序代理代码(请参阅示例appDelegate方法performFetchWithCompletionHandler)。将locationUpdateBackgroundMode属性(AGLocationDispatcher对象)设置为AGLocationBackgroundModeFetch状态;

AGBackgroundLocationDispatcher 代码在应用不活跃时运行,默认的 apps 对象和 UI 都将不存在。AGBackgroundLocationDispatcher 代码必须本地存储位置(在文件、coredata 等),将其发送到服务器或创建UILocalNotification(以在正常模式下启动应用)。AGBackgroundLocationDispatcher 代码将在活跃运行后的 10 秒到 30 秒内被系统终止。

AGBackgroundLocationDispatcher 包装器为您的后台代码和回调块提供 init 方法,您需要在位置任务完成时调用该块。

AGBackgroundLocationDispatcher 代码示例

[[AGBackgroundLocationDispatcher alloc] initWithASynchronousLocationUpdateBlock:^(AGLocation *newLocation, LDSignificationLocationASynchronousEndUpdateBlock updateCompletionBlock) {

    NSString *string = [NSString stringWithFormat:@"example.com?location=%@",  [newLocation description] ];
    NSURL *url = [NSURL URLWithString:string];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest: request];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

        updateCompletionBlock(); //data send successfully

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        updateCompletionBlock(); //data dont send 

    }];

    [operation start];

}];

使用地理编码

使用 AGGeoDispatcher 类进行直接和反向地理编码。

只需初始化 AGGeoDispatcher 类

AGGeoDispatcher *geoDispatcher = [[AGGeoDispatcher alloc] init]

实现以下方法

- (void)requestGeocodeForLocation: success: andFail:
- (void)requestLocationForAddress: success: andFail:

要选择地理编码提供商(Apple、Google、Yandex),使用以下方法

- (void)setGeocoderProvider:

管理您的路线

AGRouteDispatcher 类提供 save/load AGRoute 数据到本地存储的方法

- (AGRoute *)loadRouteWithName:
- (void)saveRoute: name:
- (void)deleteDocWithName:

区域调度器

AGRegionDispatcher 类用于监控进入/退出某些区域。使用以下块方法进行监控

- (void)addCoordinateForMonitoring: updateBlock: failBlock:
- (void)addCoordinateForMonitoring: withRadius: desiredAccuracy: updateBlock: failBlock:
- (void)addRegionForMonitoring: desiredAccuracy: updateBlock: failBlock:
- (void)stopMonitoringForRegion:
- (void)stopMonitoringAllRegions

要求

作者

Agilie [email protected]

许可证

AGLocationDispatcher 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。