uni-app 安卓系统中在webview上传文件拒绝相机权限后,手动打开权限依然无法打开相机

uni-app 安卓系统中在webview上传文件拒绝相机权限后,手动打开权限依然无法打开相机

操作步骤:

  1. 在webview的网页中点击上传按钮
  2. 点击相机
  3. 显示获取相机权限,点击拒绝
  4. 再次点击相机
  5. 再次显示获取相机权限,点击拒绝
  6. 打开App的权限管理,开启相机权限
  7. 回到App中在webview的网页中点击上传按钮

预期结果:

能正常打开相机

实际结果:

无法打开相机

bug描述:

在webview里访问的页面中有一个上传文件按钮,选择相机后连续拒绝获取相机权限两次后,手动到App的权限管理中打开权限,在点击相机权限无反应。

项目 信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 Windows10
HBuilderX类型 正式
HBuilderX版本号 4.75
手机系统 Android
手机系统版本号 Android 14
手机厂商 红米
手机机型 Redmin Note 12 Turbo
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

Image Image


更多关于uni-app 安卓系统中在webview上传文件拒绝相机权限后,手动打开权限依然无法打开相机的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

手动打开权限后,杀掉 app 重启会正常吗?

更多关于uni-app 安卓系统中在webview上传文件拒绝相机权限后,手动打开权限依然无法打开相机的实战教程也可以访问 https://www.itying.com/category-93-b0.html


重启App后也不行

这是一个典型的Android权限管理机制与WebView交互的问题。在Android系统中,当用户连续两次拒绝某个权限请求后,系统会标记为“不再询问”,即使后续手动开启权限,WebView组件也可能无法自动感知权限状态变化。

问题原因:

  1. WebView内部的权限请求机制与原生不同,权限拒绝状态被缓存
  2. 连续拒绝后系统限制了权限的再次请求
  3. WebView没有正确检测到手动开启的权限状态

解决方案:

  1. 重启应用 最简单有效的方法是彻底关闭App后重新启动,让WebView重新初始化并检测权限状态。

  2. 使用uni-app原生权限API 在webview组件外,通过uni.authorize主动请求相机权限:

uni.authorize({
  scope: 'scope.camera',
  success() {
    console.log('相机权限已获取');
  }
});
  1. 权限状态监听 在App.vue或页面中监听权限变化:
uni.onNeedPermission((result) => {
  if (result.type === 'camera') {
    // 处理相机权限逻辑
  }
});
回到顶部