uni-app Android11下选择公用图片仍然提示不支持
uni-app Android11下选择公用图片仍然提示不支持
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | WIN10 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
手机系统:Android
手机系统版本号:Android 11
手机厂商:小米
手机机型:Redmi Note 9 Pro
页面类型:vue
打包方式:云端
操作步骤:
plus.gallery.pick() uni.getFileInfo();
预期结果:
正常获取文件信息
实际结果:
提示code 15报错
bug描述:
在Android11下,使用plus.gallery.pick()API选取公用图片并传入uni.getFileInfo()时,会报错提示
“targetSdkVersion设置>=29后在Android10+系统设备不支持当前路径。请更改为应用运行路径!”
但pick()所获取的路径确认为公用目录(Pictures)。
获取的路径为:
> file:///storage/emulated/0/Pictures/Weixin/mmexport1622726586687.jpg
尝试过将该图片移动到Pictures根目录中亦无果,值得注意的是同样的图片传入uni.getImageInfo是正常的。
这个BUG因为近期厂商大规模升级到Android11,已经非常多用户反馈,这直接导致图片、文件上传功能无法工作,非常严重影响到用户使用,希望尽快修复或提供临时方案。
更多关于uni-app Android11下选择公用图片仍然提示不支持的实战教程也可以访问 https://www.itying.com/category-93-b0.html
问题已确认 临时方案 先把file://去掉
更多关于uni-app Android11下选择公用图片仍然提示不支持的实战教程也可以访问 https://www.itying.com/category-93-b0.html
/storage/emulated/0/Pictures/mmexport1622726586687.jpg 也还是一样的报错
我这边用HX3.1.16的默认基座测试 是通的 我们这边已经在处理 预计下个版本修复
回复 DCloud_Android_ST: 我也是3.1.16,我简化成只有这两个调用,并且新开了一个项目用默认基座尝试也还是一样,文件权限也授权了
plus.gallery.pick( async (data) => { let [err, fileInfo] = await uni.getFileInfo({ filePath: data.replace(/file:///g,’’) }); console.log(err, fileInfo,data.replace(/file:///g,’’)); }, err => { console.log(err); } );
这么严重的BUG修的这么慢…真的绝了…幸好上线时间没那么急,这个速度谁敢用在商业项目上?
HX 3.1.19.20210613-alpha 已修复
这是Android 11文件权限策略变更导致的兼容性问题。从Android 11开始,应用对共享存储空间的访问受到更严格的限制,即使获取到文件路径,也可能无法直接读取。
临时解决方案:
- 使用uni.chooseImage替代plus.gallery.pick:
uni.chooseImage({
count: 1,
success: (res) => {
const tempFilePaths = res.tempFilePaths;
uni.getFileInfo({
filePath: tempFilePaths[0],
success: (info) => {
console.log(info);
}
});
}
});
- 如果必须使用plus.gallery.pick,需要先将文件复制到应用沙箱目录:
plus.gallery.pick((file) => {
plus.io.resolveLocalFileSystemURL(file, (entry) => {
entry.copyTo(plus.io.PRIVATE_WWW, 'temp.jpg', (newEntry) => {
uni.getFileInfo({
filePath: newEntry.toLocalURL(),
success: (info) => {
console.log(info);
}
});
});
});
});
- 在manifest.json中配置Android权限:
{
"app-plus": {
"distribute": {
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\"/>"
]
}
}
}
}

