{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671516380257,"data":{"id":71712253,"title":"8.2.6.4 下载/更新U盘城市数据","slug":"xcxktb","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"
com.autonavi.gbl.data.model.OperationType
开始下载(包含下载、更新、重试动作)
com.autonavi.gbl.data.observer.IDownloadObserver
由调用者继承实现,可以添加多个,通常一个即可。下载进度,下载过程中的城市数据状态变化、以及发生错误都是通过该观察者通知回调。
void onDownLoadStatus (@DownLoadMode.DownLoadMode1 int downLoadMode,
@DataType.DataType1 int dataType, int id,
@TaskStatusCode.TaskStatusCode1 int taskCode,
int opCode)
com.autonavi.gbl.data.model.TaskStatusCode
com.autonavi.gbl.data.model.OperationErrCode
void onPercent(@DownLoadMode.DownLoadMode1 int downLoadMode,
@DataType.DataType1 int dataType, int id, int percentType, float percent)
percentType 参数:0-表示下载进度,1-表示解压进度。
备注:请注意IDownloadObserver的生命周期,确保城市数据操作结束之前,请确保观察者不被释放。
添加下载状态观察者监听
移除下载状态观察者
以上接口参数downLoadMode,均需传 DOWNLOAD_MODE_USB 值,表示U盘更新下载模式。
注意事项:
说明:函数详情,请复制函数名称到在线API搜索
1) 公共错误码
com.autonavi.gbl.util.errorcode.common.Service
com.autonavi.gbl.util.errorcode.common.System
com.autonavi.gbl.util.errorcode.common.ThirdParty
2)数据模块错误码
com.autonavi.gbl.util.errorcode.data.Common
/**\n * 非法操作错误\n */\npublic final static int AUTO_UNKNOWN_ERROR = Integer.MIN_VALUE;\n\n/**\n * 指定U盘路径下不存在有效数据\n */\npublic final static int ErrorCodeUsbNoData = 1107296256;\n\n/**\n * 指定U盘路径下存在不兼容数据\n */\npublic final static int ErrorCodeUsbIncompatibleData = 1107296257;\n\n/**\n * 临时目录下存在压缩包,可能发生解压时掉电\n */\npublic final static int ErrorCodeExistZip = 1107296258;\n\n/**\n * 数据内容异常\n */\npublic final static int ErrorCodeDataInvalid = 1107296259;\n\n/**\n * 数据融合错误\n */\npublic final static int ErrorCodeDataMerge = 1107296260;
public class processOptStatus(OptStatus status)\n{\n\tswitch (status)\n {\n case OptStatus.OPT_NO_SPACE_LEFTED:\n {\n // 1. 暂停正在下载的城市数据\n MapDataService mapDataService = ServiceMgr.getBLService(SingleServiceID.MapDataSingleServiceID);\n ArrayList<int> cityAdcodes = getDownloadingCityAdcodes(); // 获取正在下载的城市数据\n mapDataService.operate(DownLoadMode.DOWNLOAD_MODE_USB, OperationType.OPERATION_TYPE_PAUSE, cityAdcodes);\n \n // 2. 前端提示:存储空间不足,请清除空间后重试\n\t\t\tbreak; \n }\n case OptStatus.OPT_SPACE_NOT_ENOUGHT:\n {\n \t// 1. 前端提示:存储空间可能不足,是否继续下载?\n if (keepDownloading) // 继续下载\n {\n \t// 获取当前点击的城市数据adcode\n \tint cityAdcode = getChoosedCityAdcode();\n ArrayList<int> cityAdcodes;\n cityAdcodes.add(cityAdcode);\n \tmapDataService.operate(DownLoadMode.DOWNLOAD_MODE_USB, OperationType.OPERATION_TYPE_START, cityAdcodes);\n }\n break;\n }\n }\n}
public class DownloadObserver implements IDownloadObserver {\n\npublic void onOperated(@DownLoadMode.DownLoadMode1 final int downLoadMode, @DataType.DataType1 final int dataType,\n @OperationType.OperationType1 final int opType, final int[] opreatedIdList) {\n \tif (downLoadMode == DownLoadMode.DOWNLOAD_MODE_USB\n && dataType == DataType.DATA_TYPE_MAP)\n {\n runOnUiThread(new Runnable() {\n @Override\n public void run() {\n\t\t\t\t\t// 通知全部数据变更,获取城市数据信息更新UI控件文案信息\n updateCityData(); // 备注:如果不想全部更新,可以获取只更更新参数 opreatedIdList 中的城市数据项\n }\n });\n }\n }\n\n @Override\n public void onDownLoadStatus(@DownLoadMode.DownLoadMode1 final int downLoadMode, @DataType.DataType1 final int dataType,\n final int id, @TaskStatusCode.TaskStatusCode1 final int taskCode, int opCode) {\n Log.d(TAG, "onDownLoadStatus: downLoadMode = " + downLoadMode + "; dataType = " + dataType + "; taskCode = " +\n taskCode + "; opCode = " + opCode);\n runOnUiThread(new Runnable() {\n @Override\n public void run() {\n /** OperationErrCode 处理 */\n if (opCode == system.ErrorCodeOutOfDisk){ // 磁盘空间不足\n \t// 内存空间不足toast\n processOptStatus(OPT_SPACE_NOT_ENOUGHT);\n }\n \n /** TaskStatusCode 处理 */\n if (TaskStatusCode.TASK_STATUS_CODE_ERR == taskCode \n && system.ErrorCodeOutOfDisk != opCode)\n {\n \t// 数据下载失败,toast提示下载失败,请重试\n }\n \n /** 通知全部数据变更,获取城市数据信息更新UI控件文案信息 */\n updateCityData();\t// 备注:如果不想全部更新,可以获取只更更新参数 id 中的城市数据项\n }\n });\n }\n\n @Override\n public void onPercent(@DownLoadMode.DownLoadMode1 final int downLoadMode, @DataType.DataType1 final int dataType, final int id,\n final int percentType, final float percent) {\n runOnUiThread(new Runnable() {\n @Override\n public void run() {\n String strMode = new String(downLoadMode != DownLoadMode.DOWNLOAD_MODE_USB ? "网络下载" : "U盘更新");\n String strDataType = new String("地图数据");\n \n MapDataService mapDataService = ServiceMgr.getBLService(SingleServiceID.MapDataSingleServiceID);\n Area area = new Area();\n int adcode = id;\n area = mapDataService.getArea(downLoadMode, adcode);\n String strPercentType = new String(0 == percentType ? "下载进度" : "解压进度");\n getPercentData().setText(strMode + "," + strDataType + ","+area.name+","+strPercentType + String.valueOf(percent)+ "%");\n }\n });\n }\n}
protected void onCreate(@Nullable Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n // ... \n // 进入离线数据下载页面处理初始化逻辑,详细请看《初始化 & 反初始化》文档调用示例\n // ...\n MapDataService mapDataService = ServiceMgr.getBLService(SingleServiceID.MapDataSingleServiceID);\n DownloadObserver downloadObserver = new DownloadObserver();\n if(null != mapDataService)\n {\n mapDataService.addUsbDownloadObserver(downloadObserver);\n }\n}
public void onClick(View v) {\n switch (v.getId()) {\n case R.id.btn_download_city_map://下载:\n case R.id.btn_pause_download: //暂停\n case R.id.btn_cancel_download: //取消\n {\n int opreationType = OPERATION_TYPE_START;\n if(v.getId() == R.id.btn_pause_download)\n {\n Log.i(TAG, "onClick: btn_pause_download: ");\n opreationType = OperationType.OPERATION_TYPE_PAUSE;\n }\n else if(v.getId() == R.id.btn_cancel_download)\n {\n Log.i(TAG, "onClick: btn_cancel_download: ");\n opreationType = OperationType.OPERATION_TYPE_CANCEL;\n }else\n {\n Log.i(TAG, "onClick: btn_download_city_map: ");\n opreationType = OperationType.OPERATION_TYPE_START;\n }\n\t\t\t\n // 获取当前点击的城市数据adcode\n int cityAdcode = getChoosedCityAdcode();\n\n // 获取城市数据下载项信息\n MapDataService mapDataService = ServiceMgr.getBLService(SingleServiceID.MapDataSingleServiceID);\n CityDownLoadItem item = mapDataService.getCityDownLoadItem(DownLoadMode.DOWNLOAD_MODE_USB, cityAdcode);\n \n if (TaskStatusCode.TASK_STATUS_CODE_SUCCESS == item.taskState\n && OperationType.OPERATION_TYPE_CANCEL == opType){\n // 返回一个错误\n return TaskStatusCode.OPT_ERROR;\n }\n \n ArrayList<int> cityAdcodes;\n cityAdcodes.add(cityAdcode);\n mapDataService.operate(DownLoadMode.DOWNLOAD_MODE_USB, opType, cityAdcodes);\n }\t\n }\n}
protected void onDestroy() {\n mIMapDataService.removeUsbDownloadObserver(mDownloadMode, this);\n super.onDestroy();\n}