{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671516377198,"data":{"id":71712232,"title":"8.2.5.4 下载/更新云端城市数据","slug":"ugngru","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,
@OperationErrCode.OperationErrCode1 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_NET 值,表示网络更新下载模式。
说明:函数详情,请复制函数名称到在线API搜索
public class OptStatus{\n\tstatic final int AUTO_UNKNOWN_ERROR = Integer.MIN_VALUE;\n static final int OPT_DONE = 0;\t\t\t\t\t\t\t\t\t\t/** 正常 */\n static final int OPT_NET_DISCONNECT = OPT_DONE + 1;\t\t\t\t\t/** 无网络连接 */\n static final int OPT_DOWNLOAD_NET_ERROR = OPT_NET_DISCONNECT + 1;\t/** 下载网络异常 */\n static final int OPT_NO_SPACE_LEFTED = OPT_FIRST_DOWNLOAD + 1;\t\t/** 剩余空间小于阈值 */\n static final int OPT_SPACE_NOT_ENOUGHT = OPT_NO_SPACE_LEFTED + 1; /** 下载量可能大于剩余空间 */\n static final int OPT_ERROR = OPT_SPACE_NOT_ENOUGHT + 1;\t\t\t\t/** 操作异常 */\n}
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_NET, 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_NET, OperationType.OPER\tqATION_TYPE_START, cityAdcodes);\n }\n break;\n }\n case OptStatus.OPT_NET_DISCONNECT:\n {\n \t// 前端提示例如:无网络连接,请检查网络后重试\n break;\n }\n case OptStatus.OPT_DOWNLOAD_NET_ERROR:\n {\n \t// 前端提示例如:网络异常,请检查网络后重试\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_NET\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, @OperationErrCode.OperationErrCode1 final 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\t\t\t\tif (opCode == OperationErrCode.OPERATION_ERR_CODE_NET_NONE){\t// 无网络\n // 提示无网络链接toast\n \tprocessOptStatus(OPT_NET_DISCONNECT);\n }\n else if (opCode == OperationErrCode.OPERATION_ERR_CODE_NET_DNS_TIMEOUT\n || opCode == OperationErrCode.OPERATION_ERR_CODE_NET_CONNECT_TIMEOUT\n || opCode == OperationErrCode.OPERATION_ERR_CODE_NET_SEND_FAILED\n || opCode == OperationErrCode.OPERATION_ERR_CODE_NET_RECV_FAILED\n || opCode == OperationErrCode.OPERATION_ERROR_CODE_NET_DATA_INVALID){ // 网络异常\n \t// 提示网络错误toast\n processOptStatus(OPT_DOWNLOAD_NET_ERROR);\n }\n else if (opCode == OperationErrCode.OPERATION_ERR_CODE_SPACE_UNENOUTH){ // 磁盘空间不足\n \t// 内存空间不足toast\n processOptStatus(OPT_SPACE_NOT_ENOUGHT);\n }\n \n /** TaskStatusCode 处理 */\n if (TaskStatusCode.TASK_STATUS_CODE_ERR == taskCode \n && OperationErrCode.OPERATION_ERR_CODE_SPACE_UNENOUTH != 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_NET ? "网络下载" : "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.addNetDownloadObserver(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 case R.id.btn_delete_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 }\n else if(v.getId() == R.id.btn_delete_download)\n {\n Log.i(TAG, "onClick: btn_delete_download: ");\n opreationType = OperationType.OPERATION_TYPE_DELETE;\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_NET, 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_NET, opType, cityAdcodes);\n }\t\n }\n}
protected void onDestroy() {\n mIMapDataService.removeNetDownloadObserver(downloadObserver);\n super.onDestroy();\n\t}
备注:进入离线数据页面添加下载观察者,退出离线数据页面移除下载观察者,保证在离线数据操作过程中观察者不被释放。
","body_lake":null,"pub_level":null,"status":"0","updated_at":"2022-04-06 07:05:08","deleted_at":null,"nameSpace":"mnlcaa/v610","browseCount":125,"collectCount":0,"estimateDate":20,"docStatus":0,"permissions":true,"overView":false}}