祖国的杂草
祖国的杂草
  • 发布:2025-07-29 14:44
  • 更新:2025-07-29 14:44
  • 阅读:203

【报Bug】请求授权相册媒体访问权限没有弹系统授权弹窗

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: macOs Sequoia 15.2

HBuilderX版本号: 4.75

手机系统: Android

手机系统版本号: Android 15

手机厂商: 小米

手机机型: 小米15

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: CLI

CLI版本号: 2

示例代码:

checkPermission('STORAGE', REFUSE_TEXT.avatar_strong, per_pop_up.value).then(res => {
if (res) {
uni.chooseImage({
count: 1,
success: (res) => {
const {tempFilePaths} = res
const avatarUrl = tempFilePaths[0]
changeAvatar(avatarUrl)
}
})
}
})

// 检查是否授权 请求授权
export function checkPermission(permissionID, permission_text_list, per_pop_up) {
return new Promise((resolve) => {
// #ifndef APP-PLUS
resolve(true)
// #endif

// #ifdef APP-PLUS  
const ANDROID_PERMISSIONS = {  
  'STORAGE_11': ['android.permission.READ_EXTERNAL_STORAGE', 'android.permission.WRITE_EXTERNAL_STORAGE'],  
  'STORAGE_13': ['android.permission.READ_MEDIA_IMAGES'],  
  'STORAGE_14': ['android.permission.READ_MEDIA_VISUAL_USER_SELECTED']  
}  

if (permissionID === 'STORAGE') {  
  const android_version = getAndroidVersion()  
  if (android_version >= 34) {  
    permissionID = 'STORAGE_14'  
  } else if (android_version === 33) {  
    permissionID = 'STORAGE_13'  
  } else {  
    permissionID = 'STORAGE_11'  
  }  
}  

const permissions = ANDROID_PERMISSIONS[permissionID]  
// 检查是否有权限  
let hadPermission = 0  
try {  
  const main = plus.android.runtimeMainActivity()  
  const ContextCompat = plus.android.importClass('androidx.core.content.ContextCompat')  
  // 调用 ContextCompat.checkSelfPermission 返回 0(有权限)或 -1(没权限)  
  for (let i = 0; i < permissions.length; i++) {  
    hadPermission = ContextCompat.checkSelfPermission(main, permissions[i])  
    if (hadPermission !== 0) { // 如果有一个权限没有授权,就跳出循环  
      break  
    }  
  }  
} catch (e) {  
  resolve(false)  
}  

if (hadPermission !== 0) {  
  // 未授权 弹窗提示使用权限说明 请求权限授权  
  per_pop_up.openPerPopUp(permission_text_list[2], permission_text_list[3])  
  // 未授权 请求权限  
  let result = false  
  plus.android.requestPermissions(permissions, function (e) {  
    if (e.deniedAlways.length > 0) {    //权限被永久拒绝  
      console.log('Always Denied!!! ' + e.deniedAlways.toString())  
    }  
    if (e.deniedPresent.length > 0) {   //权限被临时拒绝  
      console.log('Present Denied!!! ' + e.deniedPresent.toString())  
    }  
    if (e.granted.length > 0) { //权限被允许  
      console.log('Present success!!! ' + e.granted.toString())  
      result = true  
    }  

    if (result) {  
      // 授权成功 关闭弹窗  
      per_pop_up.closePerPopUp()  
    } else {  
      // 授权失败 弹窗让用户手动去设置授权  
      showAndroidPermissionModel(permission_text_list[1], per_pop_up)  
    }  
    resolve(result)  
  }, function (e) {  
    console.log('Request Permissions error:' + JSON.stringify(e))  
    resolve(false)  
  })  
} else {  
  resolve(true)  
}  
// #endif  

})
}

操作步骤:

点击头像检查是否授权相册媒体访问权限

预期结果:

没有授权则请求权限,弹出系统弹窗授权

实际结果:

直接拒绝了授权,并没有弹出系统的授权弹窗

bug描述:

本地调试没有问题,请求权限的时候能正常弹出系统的授权弹窗,但是打包后,android15版本的手机,请求授权直接拒绝了授权并没有弹出系统授权的弹窗,用android11手机测试能正常弹出。测试过其他的权限,比如相机权限的授权,无论什么版本的android都能正常弹出系统授权,但是就是媒体访问权限android.permission.READ_MEDIA_VISUAL_USER_SELECTED不行

下面第一张图是HbuilderX调试正常的情况,第二张图是打包app后android15请求授权没有系统授权弹窗的情况,第三张图是打包app后android11请求授权正常弹出系统授权的情况

2025-07-29 14:44 负责人:无 分享
已邀请:

要回复问题请先登录注册