TencentLBSLocationManager.h 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. //
  2. // TencentLBSLocationManager.h
  3. // TencentLBS
  4. //
  5. // Created by mirantslu on 16/4/19.
  6. // Copyright © 2016年 Tencent. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import <CoreLocation/CoreLocation.h>
  10. #import "TencentLBSLocation.h"
  11. NS_ASSUME_NONNULL_BEGIN
  12. typedef NS_ENUM(NSUInteger, TencentLBSRequestLevel) {
  13. TencentLBSRequestLevelGeo = 0,
  14. TencentLBSRequestLevelName = 1,
  15. TencentLBSRequestLevelAdminName = 3,
  16. TencentLBSRequestLevelPoi = 4,
  17. };
  18. typedef NS_ENUM(NSUInteger, TencentLBSLocationCoordinateType) {
  19. TencentLBSLocationCoordinateTypeGCJ02 = 0, //!< 火星坐标,即国测局坐标
  20. TencentLBSLocationCoordinateTypeWGS84 = 1, //!< 地球坐标,注:如果是海外,无论设置的是火星坐标还是地球坐标,返回的都是地球坐标
  21. };
  22. typedef NS_ENUM(NSUInteger, TencentLBSLocationError) {
  23. TencentLBSLocationErrorUnknown = 0, //!< 错误码,表示目前位置未知,但是会一直尝试获取
  24. TencentLBSLocationErrorDenied = 1, //!< 错误码,表示定位权限被禁止
  25. TencentLBSLocationErrorNetwork = 2, //!< 错误码,表示网络错误
  26. TencentLBSLocationErrorHeadingFailure = 3, //!< 错误码,表示朝向无法确认
  27. TencentLBSLocationErrorOther = 4, //!< 错误码,表示未知错误
  28. };
  29. /**
  30. * TencentLBSLocatingCompletionBlock 单次定位返回Block
  31. *
  32. * @param location 位置信息
  33. * @param error 错误信息 参考 TencentLBSLocationError
  34. */
  35. typedef void (^TencentLBSLocatingCompletionBlock)(TencentLBSLocation * _Nullable location, NSError * _Nullable error);
  36. @protocol TencentLBSLocationManagerDelegate;
  37. @interface TencentLBSLocationManager : NSObject
  38. /**
  39. * API Key, 在使用定位SDK服务之前需要先绑定key。
  40. */
  41. @property (nonatomic, copy) NSString* apiKey;
  42. /**
  43. * 实现了 TencentLBSLocationManagerDelegate 协议的类指针。
  44. */
  45. @property (nonatomic, weak) id<TencentLBSLocationManagerDelegate> delegate;
  46. /**
  47. * 设定定位的最小更新距离。默认为 kCLDistanceFilterNone。
  48. */
  49. @property (nonatomic, assign) CLLocationDistance distanceFilter;
  50. /**
  51. * 设定定位精度。默认为 kCLLocationAccuracyBest 。
  52. */
  53. @property (nonatomic, assign) CLLocationAccuracy desiredAccuracy;
  54. /**
  55. * 指定定位是否会被系统自动暂停。默认为 YES 。
  56. */
  57. @property (nonatomic, assign) BOOL pausesLocationUpdatesAutomatically;
  58. /**
  59. * 是否允许后台定位。默认为 NO。
  60. * iOS 9.0 以上用户需要设置该选项并且在info.list里面Background Modes 中的 Location updates 处于选中状态才可以使用后台定位权限。iOS 9.0之前可以直接申请总是使用的权限来获得后台定位。
  61. *
  62. * 设置为 YES 的时候必须保证 Background Modes 中的 Location updates 处于选中状态,否则会抛出异常。
  63. */
  64. @property (nonatomic, assign) BOOL allowsBackgroundLocationUpdates;
  65. /**
  66. * 用户的活动类型
  67. *
  68. * 设置用户的活动类型。默认值为 CLActivityTypeOther
  69. */
  70. @property (nonatomic, assign) CLActivityType activityType;
  71. /**
  72. * 设置当朝向改变时,每隔多少度调用一次
  73. * 只有当设备方向的改变值超过该属性值时才激发delegate的方法。
  74. */
  75. @property(nonatomic, assign) CLLocationDegrees headingFilter;
  76. /**
  77. * 设置设备当前的朝向
  78. */
  79. @property(nonatomic, assign) CLDeviceOrientation headingOrientation;
  80. /**
  81. * 连续定位的逆地理信息请求的Level。默认为TencentLBSRequestLevelGeo
  82. */
  83. @property (nonatomic, assign) TencentLBSRequestLevel requestLevel;
  84. /**
  85. * 返回的TencentLBSLocation的location字段的坐标类型。默认为TencentLBSLocationCoordinateTypeGCJ02。
  86. *
  87. * 在一次定位过程中,只允许设置一次,不允许重复设置
  88. */
  89. @property (nonatomic, assign) TencentLBSLocationCoordinateType coordinateType;
  90. /**
  91. * 指定POI的更新间隔。 默认是10s
  92. */
  93. @property(nonatomic, assign) NSInteger poiUpdateInterval;
  94. #pragma mark -
  95. - (void)requestWhenInUseAuthorization;
  96. - (void)requestAlwaysAuthorization;
  97. #pragma mark -
  98. /**
  99. * 单次定位
  100. *
  101. * 该方法为下面方法的一层封装。
  102. * level默认是TencentLBSRequestLevelPoi
  103. * timeout默认是10s
  104. */
  105. - (BOOL)requestLocationWithCompletionBlock:(TencentLBSLocatingCompletionBlock)completionBlock;
  106. /**
  107. * 单次定位
  108. *
  109. * 注意:不能连续调用该接口,需在上一次返回之后才能再次发起调用。该接口兼容iOS 7.0及以上,因iOS 9.0系统提供单次定位能力,故在9.0以上会调用系统单次定位接口,9.0之前SDK完成封装。可以通过调用cancelRequestLocation来取消。
  110. *
  111. * @param level 可以根据此参数来对应的获取POI信息
  112. * @param timeout 表示获取POI的超时时间。
  113. * @param completionBlock 单次定位完成后的Block
  114. */
  115. - (BOOL)requestLocationWithRequestLevel:(TencentLBSRequestLevel)level
  116. locationTimeout:(NSTimeInterval)timeout
  117. completionBlock:(TencentLBSLocatingCompletionBlock)completionBlock;
  118. /**
  119. * 取消单次定位
  120. **/
  121. - (void)cancelRequestLocation;
  122. /**
  123. * 开始连续定位
  124. */
  125. - (void)startUpdatingLocation;
  126. /**
  127. * 停止连续定位
  128. */
  129. - (void)stopUpdatingLocation;
  130. /**
  131. * 开启更新定位朝向
  132. */
  133. - (void)startUpdatingHeading;
  134. /**
  135. * 结束更新定位朝向
  136. */
  137. - (void)stopUpdatingHeading;
  138. /**
  139. * 停止展示定位朝向校准提示
  140. */
  141. - (void)dismissHeadingCalibrationDisplay;
  142. // 测试使用
  143. #if TENCENTLBS_DEBUG
  144. + (void)upLoadData;
  145. + (NSData *)getLocationLog;
  146. + (void)newLocationLog;
  147. #endif
  148. @end
  149. #pragma mark - TencentLBSLocationManagerDelegate
  150. /**
  151. * TencentLBSLocationManagerDelegate
  152. * 定义了发生错误时的错误回调方法,连续定位的回调方法等。
  153. */
  154. @protocol TencentLBSLocationManagerDelegate <NSObject>
  155. @optional
  156. /**
  157. * 当定位发生错误时,会调用代理的此方法
  158. *
  159. * @param manager 定位 TencentLBSLocationManager 类
  160. * @param error 返回的错误,参考 TencentLBSLocationError
  161. */
  162. - (void)tencentLBSLocationManager:(TencentLBSLocationManager *)manager
  163. didFailWithError:(NSError *)error;
  164. /**
  165. * 连续定位回调函数
  166. *
  167. * @param manager 定位 TencentLBSLocationManager 类
  168. * @param location 定位结果
  169. */
  170. - (void)tencentLBSLocationManager:(TencentLBSLocationManager *)manager
  171. didUpdateLocation:(TencentLBSLocation *)location;
  172. /**
  173. * 定位权限状态改变时回调函数
  174. *
  175. * @param manager 定位 TencentLBSLocationManager 类
  176. * @param status 定位权限状态
  177. */
  178. - (void)tencentLBSLocationManager:(TencentLBSLocationManager *)manager
  179. didChangeAuthorizationStatus:(CLAuthorizationStatus)status;
  180. /**
  181. * 定位朝向改变时回调函数
  182. *
  183. * @param manager 定位 TencentLBSLocationManager 类
  184. * @param newHeading 新的定位朝向
  185. */
  186. - (void)tencentLBSLocationManager:(TencentLBSLocationManager *)manager
  187. didUpdateHeading:(CLHeading *)newHeading;
  188. /**
  189. * 是否展示定位朝向校准提示的回调函数
  190. *
  191. * @param manager 定位 TencentLBSLocationManager 类
  192. */
  193. - (BOOL)tencentLBSLocationManagerShouldDisplayHeadingCalibration:(TencentLBSLocationManager *)manager;
  194. /**
  195. * 只是内部调试使用,外部不应实现该接口
  196. */
  197. - (void)tencentLBSLocationManager:(TencentLBSLocationManager *)manager didThrowLocation:(TencentLBSLocation *)location;
  198. @end
  199. NS_ASSUME_NONNULL_END