uni-app uni.chooseImage方法在H5上部分安卓手机升级系统后使用拍照的形式拍照上传图片无法得到图片内容

uni-app uni.chooseImage方法在H5上部分安卓手机升级系统后使用拍照的形式拍照上传图片无法得到图片内容

开发环境 版本号 项目创建方式
Windows win11 HBuilderX

产品分类:
uniapp/H5

浏览器平台:
手机系统浏览器

浏览器版本:
vivo 16 SDK:36

示例代码:

console.log('准备去拍照')
try {
uni.chooseImage({
count: 1, //默认9
sizeType: [ 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['camera'], //从相册选择
success: function (res) {
console.log(JSON.stringify(res.tempFilePaths));
},
fail:function (failres) {
console.log('failres',failres);
},
complete:function (completeres) {
console.log('completeres',completeres);
},
});
}catch (error) {
console.error('拍照过程出错:', error);
// 需要将错误传递给回调函数或抛出
throw error;
}

操作步骤:

console.log('准备去拍照')
try {
uni.chooseImage({
count: 1, //默认9
sizeType: [ 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['camera'], //从相册选择
success: function (res) {
console.log(JSON.stringify(res.tempFilePaths));
},
fail:function (failres) {
console.log('failres',failres);
},
complete:function (completeres) {
console.log('completeres',completeres);
},
});
}catch (error) {
console.error('拍照过程出错:', error);
// 需要将错误传递给回调函数或抛出
throw error;
}

预期结果:

升级过手机系统的手机可以通过uni.chooseImage方法获取到图片数据

实际结果:

app内嵌套H5页面,使用uni.chooseImage方法拍照,vivo X8s型号(不排除其他型号手机没问题)手机在升级手机系统后点击拍照,回调方法无返回任何数据,try 不抛出错误

bug描述:

app内嵌套H5页面,使用uni.chooseImage方法拍照,vivo X8s型号(不排除其他型号手机没问题)手机在升级手机系统后点击拍照,success,fail,complete回调方法无返回任何数据,try 不抛出错误


更多关于uni-app uni.chooseImage方法在H5上部分安卓手机升级系统后使用拍照的形式拍照上传图片无法得到图片内容的实战教程也可以访问 https://www.itying.com/category-93-b0.html

19 回复

所有打印都没有?

更多关于uni-app uni.chooseImage方法在H5上部分安卓手机升级系统后使用拍照的形式拍照上传图片无法得到图片内容的实战教程也可以访问 https://www.itying.com/category-93-b0.html


没有 只有最外层的准备开始拍照有打印

手机操作系统为15 SDK:35时正常使用,升级到16 SDK:36后这个api无反应

补充: 手机操作系统为15 SDK:35时正常使用,升级到16 SDK:36后uni.chooseImage无反应

升级后 Android 是 16 或者以上的了么

这个是16了么

这个不是,这个版本的可以拍没有问题

“permissions”: [ “<uses-permission android:name=“android.permission.CAMERA” />”, “<uses-permission android:name=“android.permission.READ_EXTERNAL_STORAGE” />”, “<uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE” />”, “<uses-permission android:name=“android.permission.READ_MEDIA_IMAGES” />” // Android 13+ 需要 ] 这几个权限也配置了么

加了这几个权限配置,新建了空白项目,目前使用oppox8s手机可以稳定复现,手机操作系统升级到16,H5使用uni.chooseImage拍照在浏览器可以拍成功,使用web-view嵌套到app里面拍照获取不到文件,16之前的版本可以成功获取图片文件,小米的手机升级到16可以获取文件

回复 w***@163.com: 现在能打印出来么?能的话,打印下看下提示什么

回复 jgj_app: 还是没打印

回复 w***@163.com: 你在 demo ,不用 webview 试试可以不

回复 jgj_app: app直接写的拍照是可以的 我们的app不是用的uni-app

回复 jgj_app: 不用webbiew直接在浏览器打开H5也可以

参考上面回复,你也明确下,这个问题只和系统有关吗。新建空白工程是否可以复现问题。如果锁定特性的版本、特定的机型,可也可以一并提供。如果确实无法修复,也可以尝试webview 通信来解决

根据上面的回复加了权限配置,新建了空白项目,目前使用oppox8s手机可以稳定复现,手机操作系统升级到16,H5使用uni.chooseImage拍照在浏览器可以拍成功,使用web-view嵌套到app里面拍照获取不到文件,16之前的版本可以成功获取图片文件,小米的手机升级到16可以获取文件

可以稳定复现的手机型号oppox8s


这个问题是由于部分安卓系统升级后,相机权限或文件访问权限策略变更导致的。在H5环境下,uni.chooseImage本质调用的是浏览器的原生文件选择器,当系统权限限制时会静默失败。

建议排查方向:

  1. 检查相机和存储权限是否正常授予。在系统升级后,应用权限可能被重置,需要在系统设置中手动开启。

  2. 尝试修改sourceType为[‘album’]测试相册选择是否正常,以确认问题是否仅限于相机功能。

  3. 在fail回调中添加更详细的错误日志捕获,虽然当前没有返回,但可以尝试监听beforeunload事件判断是否页面被意外刷新。

  4. 考虑使用条件编译,在H5端改用input type="file"直接调用系统相机:

// #ifdef H5
const input = document.createElement('input')
input.type = 'file'
input.accept = 'image/*'
input.capture = 'camera'
input.onchange = (e) => {
  // 处理文件
}
input.click()
// #endif
回到顶部