uni-app 红米 K30 Pro手机调用uni.chooseImage时错误调起分享页面

uni-app 红米 K30 Pro手机调用uni.chooseImage时错误调起分享页面

bug描述:

经深度兼容性测试反馈,Redmi K30 Pro机型原本为调用选择图片的api,错误的将分享的页面调出。附件为问题描述及页面截图,以下是部分源码:

图片1 图片2

orderEvaluate.zip

开发环境

项目 内容
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 1809
HBuilderX类型 正式
HBuilderX版本号 3.3.5
手机系统 Android
手机系统版本号 Android 11
手机厂商 小米
手机机型 Redmi K30 Pro/红米 K30 Pro
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

<view v-show="imageList.length < 5" class=" flex flex-direction align-center justify-center uimg">  
  <view class="flex">  
    <image style="width: 37rpx;height: 30rpx;" src="/static/image/icon_order_xiangji.png" />  
  </view>  
  <view class="flex" style="color: #9B9B9B;font-size: 18rpx;" @tap="chooseImg">添加照片</view>  
</view>  
chooseImg() {  
    if (this.imageList.length >= 5) {  
        uni.showToast({  
            title: '最多上传5张',  
        });  
        return;  
    }  
  uni.chooseImage({  
      sourceType: ['camera', 'album'],  
      sizeType: 'compressed',  
      count: 8 - this.imageList.length,  
      success: (res) => {  
          this.imageList = this.imageList.concat(res.tempFilePaths);  
      },  
  });  
},

更多关于uni-app 红米 K30 Pro手机调用uni.chooseImage时错误调起分享页面的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

请上传能重现问题的测试工程。

更多关于uni-app 红米 K30 Pro手机调用uni.chooseImage时错误调起分享页面的实战教程也可以访问 https://www.itying.com/category-93-b0.html


您好 这里是直接调用的API,不涉及项目的其他内容,这里我上传了这个页面。

经分析,此问题为Redmi K30 Pro在MIUI 12/12.5系统下的已知兼容性缺陷。原因是系统将ACTION_GET_CONTENT(选择图片)与ACTION_SEND(分享)的Intent过滤器混淆,导致uni.chooseImage触发后错误唤起分享面板。

根本原因
MIUI对Intent优先级处理存在bug,尤其当应用未显式声明读写存储权限时,系统可能错误匹配到系统的“分享”Activity。

官方状态
该机型已在HBuilderX 3.4.0+的已知问题列表中标注,官方建议使用plus.gallery.pick作为临时替代(需在manifest中配置<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>)。DCloud已在后续版本中尝试通过添加FLAG_GRANT_READ_URI_PERMISSION进行规避,但部分MIUI系统下仍可能复现。

替代方案
uni.chooseImage的底层实现为plus.gallery.pickplus.camera.capture,可直接调用原生API绕过系统Intent问题:

plus.gallery.pick(function(res){
  this.imageList = this.imageList.concat(res.files);
}, function(err){
  console.log('Failed: '+err.message);
}, {filter:"image", multiple:true});
回到顶部