uni-app uni.chooseImage回调失败,chooseImage:fail targetSdkVersion设置>=29后在Android10+系统设备不支持当前路径 请更改为应用运行路径
uni-app uni.chooseImage回调失败,chooseImage:fail targetSdkVersion设置>=29后在Android10+系统设备不支持当前路径 请更改为应用运行路径
项目 | 信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Mac |
PC开发环境操作系统版本号 | macOS Big Sur 11.1 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.1.4 |
手机系统 | Android |
手机系统版本号 | Android 10 |
手机厂商 | 小米 |
手机机型 | 小米9se |
页面类型 | vue |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码:
uni.chooseImage({
count: 1, // 默认9
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: (res) => {
console.log(1111111, res);
},
fail: (res) => {
console.log('fail', res);
}
});
``
```
### 操作步骤:
用小米9se或者华为荣耀10等手机,通过手机浏览器下载图片,然后用uni.chooseimage选择该图片,没有success回调
### 预期结果:
uni.chooseimage能正常回调
### 实际结果:
uni.chooseimage能正常回调
### bug描述:
查看官方历史更新记录,## 2.8.11.20200907
- Android平台 修复 设置targetversion为29时,从相册选择图片返回路径不正确的Bug [详情](https://ask.dcloud.net.cn/question/105269)
官方说明已经修复该bug,但是现在用3.1.4还是会出现这样的问题。
复现过程,用小米9se或者华为荣耀10等手机,通过手机浏览器下载图片,然后用uni.chooseimage选择该图片,没有success回调,fail回调出错信息chooseImage:fail targetSdkVersion设置>=29后在Android10+系统设备不支持当前路径。请更改为应用运行路径!具体请看:[https://ask.dcloud.net.cn/article/36199](https://ask.dcloud.net.cn/article/36199)
查看了36199文档,没看明白,是用plus.gallery.pick替代uni.chooseimage?
更多关于uni-app uni.chooseImage回调失败,chooseImage:fail targetSdkVersion设置>=29后在Android10+系统设备不支持当前路径 请更改为应用运行路径的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
测试代码补充完整。包含具体文件路径等信息,这种问题一般都是路径不在可操作路径范围导致。 HX默认基座可以复现问题吗?
更多关于uni-app uni.chooseImage回调失败,chooseImage:fail targetSdkVersion设置>=29后在Android10+系统设备不支持当前路径 请更改为应用运行路径的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个因Android 10分区存储策略导致的兼容性问题。当targetSdkVersion≥29时,应用无法直接访问外部存储的公共路径。
解决方案:
- 在manifest.json中配置Android适配:
"android" : {
"targetSdkVersion" : 29,
"permissionExternalStorage" : {
"request" : "once",
"prompt" : "应用保存运行状态等信息需要读写手机存储"
}
}
- 使用uni-app的临时文件路径处理:
uni.chooseImage({
success: (res) => {
// 将选择的文件复制到应用私有目录
const tempFilePath = res.tempFilePaths[0];
plus.io.resolveLocalFileSystemURL(tempFilePath, (entry) => {
entry.copyTo(plus.io.PRIVATE_WWW, 'temp_image.jpg', () => {
// 使用复制后的文件路径
});
});
}
});
- 或者使用plus.gallery.pick替代(需处理5+ API兼容性):
plus.gallery.pick((path) => {
// 处理选择的文件路径
}, (e) => {
console.error(e);
});