{"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":"

场景图

时序图

获取U盘城市数据信息

关键参数

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盘更新下载模式。


注意事项:

  1. DOWNLOAD_MODE_USB 模式下,仅支持START 、CANCEL两种下载操作类型。因为U盘更新不支持城市项断点续传功能。
  2. 一旦取消后,再次更新,被取消城市,需要重新下载更新数据包。同时,U盘下载更新完成后变成已下载状态的城市项。
  3. 需要在 DOWNLOAD_MODE_NET 模式执行DELETE下载操作,才能将数据删除。


说明:函数详情,请复制函数名称到在线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}


","body_lake":null,"pub_level":null,"status":"0","updated_at":"2022-04-06 07:05:11","deleted_at":null,"nameSpace":"mnlcaa/v610","browseCount":89,"collectCount":0,"estimateDate":18,"docStatus":0,"permissions":true,"overView":false}}