BMKGeoFenceManager.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. //
  2. // BMKGeoFenceManager.h
  3. // BMKLocationKit
  4. //
  5. // Created by baidu on 2017/3/2.
  6. // Copyright © 2017年 baidu. All rights reserved.
  7. //
  8. #import "BMKGeoFenceRegion.h"
  9. @protocol BMKGeoFenceManagerDelegate;
  10. ///地理围栏监听状态类型
  11. typedef NS_OPTIONS(NSUInteger, BMKGeoFenceActiveAction)
  12. {
  13. BMKGeoFenceActiveActionNone = 0, ///< 不进行监听
  14. BMKGeoFenceActiveActionInside = 1 << 0, ///< 在范围内
  15. BMKGeoFenceActiveActionOutside = 1 << 1, ///< 在范围外
  16. BMKGeoFenceActiveActionStayed = 1 << 2, ///< 停留(在范围内超过10分钟)
  17. };
  18. ///BMKGeoFence errorDomain
  19. FOUNDATION_EXPORT NSErrorDomain const _Nonnull BMKGeoFenceErrorDomain;
  20. ///地理围栏错误码
  21. typedef NS_ENUM(NSInteger, BMKGeoFenceErrorCode) {
  22. BMKGeoFenceErrorUnknown = 1, ///< 未知错误
  23. BMKGeoFenceErrorInvalidParameter = 2, ///< 参数错误
  24. BMKGeoFenceErrorFailureConnection = 3, ///< 网络连接异常
  25. BMKGeoFenceErrorFailureAuth = 4, ///< 鉴权失败
  26. BMKGeoFenceErrorNoValidFence = 5, ///< 无可用围栏
  27. BMKGeoFenceErroFailureLocating = 6, ///< 定位错误
  28. };
  29. ///地理围栏管理类
  30. @interface BMKGeoFenceManager : NSObject
  31. ///实现了 BMKGeoFenceManagerDelegate 协议的类指针。
  32. @property (nonatomic, weak, nullable) id<BMKGeoFenceManagerDelegate> delegate;
  33. ///需要进行通知的行为,默认为BMKGeoFenceActiveActionInside。
  34. @property (nonatomic, assign) BMKGeoFenceActiveAction activeAction;
  35. ///指定定位是否会被系统自动暂停。默认为NO。
  36. @property (nonatomic, assign) BOOL pausesLocationUpdatesAutomatically;
  37. ///是否允许后台定位。默认为NO。只在iOS 9.0及之后起作用。设置为YES的时候必须保证 Background Modes 中的 Location updates 处于选中状态,否则会抛出异常。
  38. @property (nonatomic, assign) BOOL allowsBackgroundLocationUpdates;
  39. /**
  40. * @brief 添加一个圆形围栏
  41. * @param center 围栏的中心点经纬度坐标
  42. * @param radius 围栏的半径,单位:米,要求大于0
  43. * @param type 围栏的坐标系类型
  44. * @param customID 用户自定义ID,可选,SDK原值返回
  45. */
  46. - (void)addCircleRegionForMonitoringWithCenter:(CLLocationCoordinate2D)center radius:(CLLocationDistance)radius coorType:(BMKLocationCoordinateType)type customID:(NSString * _Nullable)customID;
  47. /**
  48. * @brief 根据经纬度坐标数据添加一个闭合的多边形围栏,点与点之间按顺序尾部相连, 第一个点与最后一个点相连
  49. * @param coordinates 经纬度坐标点数据,coordinates对应的内存会拷贝,调用者负责该内存的释放
  50. * @param count 经纬度坐标点的个数,不可小于3个
  51. * @param type 围栏的坐标系类型
  52. * @param customID 用户自定义ID,可选,SDK原值返回
  53. */
  54. - (void)addPolygonRegionForMonitoringWithCoordinates:(CLLocationCoordinate2D * _Nonnull)coordinates count:(NSInteger)count coorType:(BMKLocationCoordinateType)type customID:(NSString * _Nullable)customID;
  55. /**
  56. * @brief 根据customID获得指定的围栏,如果customID传nil,则返回全部围栏
  57. * @param customID 用户执行添加围栏函数时传入的customID
  58. * @return 获得的围栏构成的数组,如果没有结果,返回nil
  59. */
  60. - (NSArray * _Nullable)geoFenceRegionsWithCustomID:(NSString * _Nullable)customID;
  61. /**
  62. * @brief 移除指定围栏
  63. * @param region 要停止监控的围栏
  64. */
  65. - (void)removeTheGeoFenceRegion:(BMKGeoFenceRegion * _Nonnull)region;
  66. /**
  67. * @brief 移除指定customID的围栏
  68. * @param customID 用户执行添加围栏函数时传入的customID
  69. */
  70. - (void)removeGeoFenceRegionsWithCustomID:(NSString * _Nullable)customID;
  71. /**
  72. * @brief 移除所有围栏
  73. */
  74. - (void)removeAllGeoFenceRegions;
  75. @end
  76. ///地理围栏代理协议,该协议定义了获取地理围栏相关回调方法,包括添加、状态改变等。
  77. @protocol BMKGeoFenceManagerDelegate <NSObject>
  78. @optional
  79. /**
  80. * @brief 添加地理围栏完成后的回调,成功与失败都会调用
  81. * @param manager 地理围栏管理类
  82. * @param regions 成功添加的一个或多个地理围栏构成的数组
  83. * @param customID 用户执行添加围栏函数时传入的customID
  84. * @param error 添加失败的错误信息
  85. */
  86. - (void)BMKGeoFenceManager:(BMKGeoFenceManager * _Nonnull)manager didAddRegionForMonitoringFinished:(NSArray <BMKGeoFenceRegion *> * _Nullable)regions customID:(NSString * _Nullable)customID error:(NSError * _Nullable)error;
  87. /**
  88. * @brief 地理围栏状态改变时回调,当围栏状态的值发生改变,定位失败都会调用
  89. * @param manager 地理围栏管理类
  90. * @param region 状态改变的地理围栏
  91. * @param customID 用户执行添加围栏函数时传入的customID
  92. * @param error 错误信息,如定位相关的错误
  93. */
  94. - (void)BMKGeoFenceManager:(BMKGeoFenceManager * _Nonnull)manager didGeoFencesStatusChangedForRegion:(BMKGeoFenceRegion * _Nullable)region customID:(NSString * _Nullable)customID error:(NSError * _Nullable)error;
  95. @end