为何调用data.getData()与data.getClipData()获取的Uri格式不同?
相册单/多选获取Uri格式不同的原因
Intent Action 设计定位不同:
ACTION_PICK是专门用来从已有数据集合里挑单个条目的Intent,像Google Photos这类相册应用在单张选择时,会返回带自身内容提供者前缀的嵌套Uri,里面还可能附带原图标记、缓存关联这类额外信息。而ACTION_GET_CONTENT是通用的内容获取接口,支持多选时,相册应用更倾向于返回系统媒体库的标准Uri(比如content://media/external/images/media/xxx),因为要适配更广泛的内容获取场景,不是只局限在“挑单个条目”上。相册应用的实现逻辑差异:就算是同一个Action,不同相册(系统自带、Google Photos、第三方相册)的Uri返回格式也可能不一样。单张用
ACTION_PICK时,Google Photos的嵌套格式是它针对单张选择做的特殊包装;但开启多选后,ACTION_GET_CONTENT触发的逻辑会优先返回标准媒体Uri,这样批量处理起来更高效,也能避免嵌套格式带来的解析麻烦。兼容性与批量操作的优化:
ACTION_GET_CONTENT作为通用接口,返回的标准Uri在跨应用访问、批量处理时兼容性更好,ContentResolver查询起来也更高效。而ACTION_PICK的嵌套Uri是特定相册的自定义格式,只适合单张场景,批量操作时这种格式会增加解析和权限验证的成本,所以相册应用在多选模式下会切换到更通用的格式。
内容的提问来源于stack exchange,提问作者Fauricio Valencia
相关产品推荐
相关产品推荐

