如何在Android端获取ML Kit的onDevice语言包下载大小?
Android平台获取ML Kit离线语言包下载大小的实现方法
ML Kit官方没有提供直接查询未下载离线语言包体积的公开API,可通过以下两种方案实现需求:
- 方案一:通过下载进度回调动态获取
在触发语言包下载时注册下载进度监听器,从回调参数中直接读取语言包总大小:- 先通过
RemoteModelManager的isModelDownloaded()方法判断对应语言的模型是否已经下载到本地,已下载的模型可直接读取本地模型文件的占用大小。 - 未下载的模型触发下载流程时,添加
OnProgressListener回调,回调参数DownloadProgress中的getTotalBytes()方法返回值即为该语言包的总下载体积,单位为字节。
代码示例:
// 以英文翻译模型为例 val englishModel = TranslateRemoteModel.Builder(TranslateLanguage.ENGLISH).build() val modelManager = RemoteModelManager.getInstance() modelManager.isModelDownloaded(englishModel).addOnSuccessListener { isDownloaded -> if (isDownloaded) { // 读取本地模型文件大小,路径可通过ML Kit模型存储目录规则拼接获取 val modelSize = File(getExternalFilesDir(null), "mlkit_models/en/translate_model.bin").length() } else { val downloadConditions = DownloadConditions.Builder().requireWifi().build() modelManager.download(englishModel, downloadConditions) .addOnProgressListener { progress -> // 语言包总大小 val totalSize = progress.totalBytes // 已下载大小 val downloaded = progress.bytesDownloaded } } } - 先通过
- 方案二:预置语言包体积映射表
目前ML Kit文本翻译类单语言离线包体积范围在30MB~60MB之间,你可以提前在测试环境下载所有业务覆盖的语言包,记录每个语言对应的体积存入本地映射表,用户查询时直接查表展示即可。该方案无需触发下载就能提前展示体积,适配性更强,适合生产环境使用。每次升级ML Kit SDK版本时,重新校验一次各语言包体积更新映射表即可。
注意:以上体积范围仅针对文本翻译类离线模型,如果使用OCR、图像识别等其他ML Kit功能的离线模型,体积差异较大,需单独测试统计。
内容的提问来源于stack exchange,提问作者Aamir
相关产品推荐
相关产品推荐

