MAOfflineMap.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. //
  2. // MAOfflineMap.h
  3. //
  4. // Copyright (c) 2013年 Amap. All rights reserved.
  5. //
  6. #import "MAConfig.h"
  7. #if MA_INCLUDE_OFFLINE
  8. #import <Foundation/Foundation.h>
  9. #import "MAOfflineProvince.h"
  10. #import "MAOfflineItemNationWide.h"
  11. #import "MAOfflineItemMunicipality.h"
  12. ///离线地图下载状态
  13. typedef NS_ENUM(NSInteger, MAOfflineMapDownloadStatus)
  14. {
  15. MAOfflineMapDownloadStatusWaiting = 0, //!< 以插入队列,等待中
  16. MAOfflineMapDownloadStatusStart, //!< 开始下载
  17. MAOfflineMapDownloadStatusProgress, //!< 下载过程中
  18. MAOfflineMapDownloadStatusCompleted, //!< 下载成功
  19. MAOfflineMapDownloadStatusCancelled, //!< 取消
  20. MAOfflineMapDownloadStatusUnzip, //!< 解压缩
  21. MAOfflineMapDownloadStatusFinished, //!< 全部顺利完成
  22. MAOfflineMapDownloadStatusError //!< 发生错误
  23. };
  24. ///离线下载错误domain
  25. extern NSString * const MAOfflineMapErrorDomain;
  26. ///离线地图下载错误类型
  27. typedef NS_ENUM(NSInteger, MAOfflineMapError)
  28. {
  29. MAOfflineMapErrorUnknown = -1, //!< 未知的错误
  30. MAOfflineMapErrorCannotWriteToTmp = -2, //!< 写入临时目录失败
  31. MAOfflineMapErrorCannotOpenZipFile = -3, //!< 打开归档文件失败
  32. MAOfflineMapErrorCannotExpand = -4 //!< 解归档文件失败
  33. };
  34. /**
  35. * 当downloadStatus == MAOfflineMapDownloadStatusProgress 时, info参数是个NSDictionary,
  36. * 如下两个key用来获取已下载和总和的数据大小(单位byte), 对应的是NSNumber(long long) 类型.
  37. * 当downloadStatus == MAOfflineMapDownloadStatusError 时, info参数是NSError
  38. */
  39. ///下载过程info的key,表示已下载数据大小
  40. extern NSString * const MAOfflineMapDownloadReceivedSizeKey;
  41. ///下载过程info的key,表示总的数据大小
  42. extern NSString * const MAOfflineMapDownloadExpectedSizeKey;
  43. /**
  44. * @brief 离线地图下载过程回调block
  45. * @param downloadItem 下载的item
  46. * @param downloadStatus 下载状态
  47. * @param info 下载过程中的附加信息
  48. */
  49. typedef void(^MAOfflineMapDownloadBlock)(MAOfflineItem * downloadItem, MAOfflineMapDownloadStatus downloadStatus, id info);
  50. /**
  51. * @brief 离线地图检查更新回调block
  52. * @param hasNewestVersion 是否有新版本的布尔值
  53. */
  54. typedef void(^MAOfflineMapNewestVersionBlock)(BOOL hasNewestVersion);
  55. ///离线地图管理类
  56. @interface MAOfflineMap : NSObject
  57. /**
  58. * @brief 获取MAOfflineMap 单例
  59. * @return MAOfflineMap
  60. */
  61. + (MAOfflineMap *)sharedOfflineMap;
  62. ///省份数组(每个元素均是MAOfflineProvince类型)
  63. @property (nonatomic, readonly) NSArray<MAOfflineProvince *> *provinces;
  64. ///直辖市数组(每个元素均是MAOfflineItemMunicipality类型)
  65. @property (nonatomic, readonly) NSArray<MAOfflineItemMunicipality *> *municipalities;
  66. ///全国概要图
  67. @property (nonatomic, readonly) MAOfflineItemNationWide *nationWide;
  68. ///城市数组, 包括普通城市与直辖市
  69. @property (nonatomic, readonly) NSArray<MAOfflineCity *> *cities;
  70. ///离线数据的版本号(由年月日组成, 如@"20130715")
  71. @property (nonatomic, readonly) NSString *version;
  72. /**
  73. * @brief 初始化离线地图数据,如果第一次运行且offlinePackage.plist文件不存在,则需要首先执行此方法。否则MAOfflineMap中的省、市、版本号等数据都为空。
  74. * @param block 初始化完成回调
  75. */
  76. - (void)setupWithCompletionBlock:(void(^)(BOOL setupSuccess))block;
  77. /**
  78. * @brief 启动下载
  79. * @param item 数据
  80. * @param shouldContinueWhenAppEntersBackground 进入后台是否允许继续下载
  81. * @param downloadBlock 下载过程block
  82. */
  83. - (void)downloadItem:(MAOfflineItem *)item shouldContinueWhenAppEntersBackground:(BOOL)shouldContinueWhenAppEntersBackground downloadBlock:(MAOfflineMapDownloadBlock)downloadBlock;
  84. /**
  85. * @brief 监测是否正在下载
  86. * @param item 条目
  87. * @return 是否在下载
  88. */
  89. - (BOOL)isDownloadingForItem:(MAOfflineItem *)item;
  90. /**
  91. * @brief 暂停下载
  92. * @param item 条目
  93. * @return 是否在执行了cancel,如果该item并未在下载中,则返回NO
  94. */
  95. - (BOOL)pauseItem:(MAOfflineItem *)item;
  96. /**
  97. * @brief 删除item对应离线地图数据
  98. * @param item 条目
  99. */
  100. - (void)deleteItem:(MAOfflineItem *)item;
  101. /**
  102. * @brief 取消全部下载
  103. */
  104. - (void)cancelAll;
  105. /**
  106. * @brief 清除所有在磁盘上的离线地图数据, 之后调用[mapView reloadMap]会使其立即生效
  107. */
  108. - (void)clearDisk;
  109. /**
  110. * @brief 监测新版本。注意:如果有新版本,会重建所有的数据,包括provinces、municipalities、nationWide、cities,外部使用应当在newestVersionBlock中更新所持有的对象。
  111. * @param newestVersionBlock 回调block
  112. */
  113. - (void)checkNewestVersion:(MAOfflineMapNewestVersionBlock)newestVersionBlock;
  114. @end
  115. @interface MAOfflineMap (Deprecated)
  116. ///deprecated
  117. @property (nonatomic, readonly) NSArray *offlineCities __attribute__ ((deprecated("use cities instead")));
  118. ///deprecated
  119. - (void)downloadCity:(MAOfflineCity *)city downloadBlock:(MAOfflineMapDownloadBlock)downloadBlock __attribute__ ((deprecated("use - (void)downloadItem:(MAOfflineItem *)item shouldContinueWhenAppEntersBackground:(BOOL)shouldContinueWhenAppEntersBackground downloadBlock:(MAOfflineMapDownloadBlock)downloadBlock instead")));
  120. ///deprecated
  121. - (void)downloadCity:(MAOfflineCity *)city shouldContinueWhenAppEntersBackground:(BOOL)shouldContinueWhenAppEntersBackground downloadBlock:(MAOfflineMapDownloadBlock)downloadBlock __attribute__ ((deprecated("use - (void)downloadItem:(MAOfflineItem *)item shouldContinueWhenAppEntersBackground:(BOOL)shouldContinueWhenAppEntersBackground downloadBlock:(MAOfflineMapDownloadBlock)downloadBlock instead")));
  122. ///deprecated
  123. - (BOOL)isDownloadingForCity:(MAOfflineCity *)city __attribute__ ((deprecated("use - (BOOL)isDownloadingForItem:(MAOfflineItem *)item instead")));
  124. ///deprecated
  125. - (void)pause:(MAOfflineCity *)city __attribute__ ((deprecated("use - (void)pauseItem:(MAOfflineItem *)item instead")));
  126. @end
  127. #endif