9***@qq.com
9***@qq.com
  • 发布:2022-11-25 16:51
  • 更新:2022-11-29 17:26
  • 阅读:282

【报Bug】nativeJS调用权限检测后,再进入相册返回后应用卡死

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 10

手机系统: Android

手机系统版本号: Android 10

手机厂商: 小米

手机机型: MIX 2S

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: CLI

CLI版本号: 2.0.1-36420220922003

示例代码:

检测权限

const context = plus.android.runtimeMainActivity()  
const result = plus.android.invoke(  
    'androidx.core.app.ActivityCompat',  
    'checkCallingOrSelfPermission',  
    context,  
    'android.permission.CAMERA'  
)  

从相册选择图片进行扫码

 uni.chooseImage({  // 使用 plus.gallery.pick 问题比 uni.chooseImage 严重  
        count: 1, // 默认9  
        sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有  
        sourceType: ['album'], // 从相册选择  
        success: (res) => {  
          setTimeout(() => {  
            plus.barcode.scan(  
              res.tempFilePaths[0],  
              (type, code) => {  
                this.handleResult(type, code)  
              },  
              () => {  
                plus.nativeUI.toast('解析失败')  
              },  
              [plus.barcode.QR],  
              true  
            )  
          }, 300) // 不加延迟会造成卡死,原因未知,不检测权限则没这个问题  
        },  
      })

操作步骤:

不同的设备复现步骤不同,大致 是 进入应用后,跳转到扫码页面,此时先进行原生权限检测,然后如果都开启了权限,相机处于扫描状态,点击 选择图片,此时,有的设备是 不选择任何图片,返回后卡死,有的是进入相册多次不选择图片返回后卡死,有的是选择不是二维码的图片解析失败后卡死,有的设备是从相册返回又从扫一扫页面返回后才明显感觉到卡,但还能操作,感觉像线程阻塞,什么都慢慢在响应,然后慢慢卡死,有的设备跳转到相册后不选择图片返回后也会走到success,然后提示解析失败。

预期结果:

原生权限检测正常,扫码正常,图片解析正常

实际结果:

应用崩溃卡死

bug描述:

因为小米商店需要加权限描述,于是整改,在权限调用时提前进行检测,以判断该不该显示权限描述,检测方法参考于 https://ask.dcloud.net.cn/article/35100 ,或者是使用代码示例中的方法都一样,在不同的设备不同的系统有不同的表现,操作不同,但最终结果都是应用卡死无法操作,页面使用plus.barcode.create创建扫码控件并append到当前webview,点击相册菜单从相册选择图片进行扫码

测试设备:realme GT : 安卓 11(使用plus.gallery.pick然后在plus.barcode.scan解析失败时卡死)、华为 EVA-AL10 :安卓 7 (这个始终没测出问题)、MIX 2S : 安卓 10(见步骤描述)、华为 SEA-AL10 : 鸿蒙2(见步骤描述)

补充:改为不使用原生权限检测,直接使用 plus.android.requestPermissions 多次操作后也会卡死,有视频,但无法传

2022-11-25 16:51 负责人:无 分享
已邀请:
9***@qq.com

9***@qq.com (作者)

在线蹲

DCloud_Android_ST

DCloud_Android_ST

权限检测建议使用 https://www.html5plus.org/doc/zh_cn/android.html#plus.android.requestPermissions

  • 9***@qq.com (作者)

    这个会发起请求弹框且只弹出两次,我无法提前得知是否需要展示权限描述,且我也在上面补充了,使用plus.android.requestPermissions确实不卡了,但测试人员在测试时,多次进入页面并返回后,即多次调用plus.android.requestPermissions和开启摄像头,相册后,还是会卡死,百分百复现,这个算是原生通信造成的阻塞吗?如果使用nativeJS调用权限检测有问题也不能解决的话,目前我只能等3.6.10发布后使用原生写个uts试试了。。。

    2022-11-30 08:45

  • 9***@qq.com (作者)

    现在怀疑 plus.android.runtimeMainActivity() 这个方法是不是有问题,根据测试人员的描述,使用plus.android.requestPermissions 判断不会卡,但是在扫一扫页面去开启权限后回来再进入相册,再返回会卡,那么 同之前的检测权限,它们共同使用的代码 都 有 plus.android.runtimeMainActivity() ,我看问题区有反馈说这个会卡的,是不是这个 有问题?我这边是只用了 HbuilderX 调试的,没有看到任何错误显示。

    2022-11-30 09:28

  • 9***@qq.com (作者)

    卡住见 https://ask.dcloud.net.cn/question/74932

    2022-11-30 09:31

  • 9***@qq.com (作者)

    还有这个 https://ask.dcloud.net.cn/question/140237

    2022-11-30 09:36

  • DCloud_Android_ST

    回复 9***@qq.com: NJS稳定性差 目前NJS已经不推荐使用了 更推荐使用原生插件或后续推出的uts

    2022-11-30 10:46

该问题目前已经被锁定, 无法添加新回复