uni-app uni.chooseImage 在安卓内H5嵌入APP时拍照上传无回调,拿不到图片

uni-app uni.chooseImage 在安卓内H5嵌入APP时拍照上传无回调,拿不到图片

项目属性
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 window10
HBuilderX类型 正式
HBuilderX版本 4.13
手机系统 Android
手机系统版本 Android 11
手机厂商 华为
手机机型 mate60
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

uni.chooseimage 发布的h5内嵌在app里面,拍照上传完过后什么回调都不进,拿不到拍的图片,只有在安卓内才出现此bug

预期结果:

能进回调,拿到图片

实际结果:

拿不到图片


更多关于uni-app uni.chooseImage 在安卓内H5嵌入APP时拍照上传无回调,拿不到图片的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

最近也遇到了这个问题,相册,文件里面都上传不了,只有近期图片能上传成功,请问怎么解决

更多关于uni-app uni.chooseImage 在安卓内H5嵌入APP时拍照上传无回调,拿不到图片的实战教程也可以访问 https://www.itying.com/category-93-b0.html


你好,请问解决了吗?

在 Uni-App 中,uni.chooseImage 用于选择或拍摄图片。如果你在安卓内嵌 H5 的 APP 中使用 uni.chooseImage 进行拍照上传时无回调,拿不到图片,可能是由于以下原因导致的:


1. 权限问题

  • 原因:安卓设备可能没有授予相机或存储权限。
  • 解决方案
    • 确保 APP 已经获取了相机和存储权限。
    • manifest.json 中配置权限:
      "permission": {
        "scope.camera": {
          "desc": "需要访问相机权限"
        },
        "scope.writePhotosAlbum": {
          "desc": "需要访问相册权限"
        }
      }
      
    • 在代码中动态请求权限:
      uni.authorize({
        scope: 'scope.camera',
        success() {
          console.log('相机权限已授权');
        },
        fail() {
          console.log('相机权限未授权');
        }
      });
      

2. H5 环境兼容性问题

  • 原因:在安卓内嵌 H5 的环境中,uni.chooseImage 的实现可能依赖原生桥接,如果桥接未正确实现,可能导致回调失败。
  • 解决方案
    • 确保 H5 嵌入的 APP 正确实现了 Uni-App 的原生桥接。
    • 检查 APP 的 WebView 是否支持 uni.chooseImage 的相关功能。
    • 如果问题依然存在,可以尝试使用原生开发的方式实现拍照上传功能。

3. 回调函数未正确执行

  • 原因:可能是回调函数未正确绑定或逻辑错误。
  • 解决方案
    • 确保回调函数正确绑定:
      uni.chooseImage({
        count: 1,
        sourceType: ['camera'],
        success(res) {
          console.log('图片路径:', res.tempFilePaths[0]);
        },
        fail(err) {
          console.log('拍照失败:', err);
        }
      });
      
    • 检查是否有其他代码逻辑影响了回调的执行。

4. 安卓 WebView 的限制

  • 原因:某些安卓 WebView 可能对 H5 的文件选择和拍照功能支持不完整。
  • 解决方案
    • 确保 WebView 的版本是最新的。
    • 在 WebView 中启用相关设置:
      webView.getSettings().setJavaScriptEnabled(true);
      webView.getSettings().setAllowFileAccess(true);
      webView.getSettings().setAllowContentAccess(true);
回到顶部