华为手机调用 uni-app requestAndroidPermission 后成功和失败回调都没触发

华为手机调用 uni-app requestAndroidPermission 后成功和失败回调都没触发

开发环境 版本号 项目创建方式
Mac 15.1 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

HBuilderX类型:正式

HBuilderX版本号:4.57

手机系统:Android

手机系统版本号:Android 10

手机厂商:华为

手机机型:p30

页面类型:vue

vue版本:vue2

打包方式:云端

项目创建方式:HBuilderX


操作步骤:

uni.chooseImage({ count: 1, sourceType: [‘album’], success: (res) => { console.log(res); }, fail: (err) => { console.log(err); }, });


### 预期结果:


可以弹出授权提示,授权后可打开相册选取器

实际结果:

无法弹出授权提示,无法打开相册选取器


### bug描述:

使用 HBuilderX 内置基座和云打包基座,在华为手机上调用 requestAndroidPermission 后没有任何返回,没办法判断 app 的权限设置。

判断权限是为了解决 chooseImage 调用后无响应,也没弹出授权的提示。

内置基座 app 在调用 chooseImage 后没有任何响应。

云打包的 app 在调用 chooseImage 第一次没响应,第二次调用时会报 setTimeout is not function 的错误。

如果手动在应用设置中开启存储权限,就可以正常调用 chooseImage 了。

以下是调用 uni.getSystemInfo 返回的设备信息:

```json
{
"SDKVersion": "",
"appId": "xxxxx",
"appLanguage": "zh-Hans",
"appName": "xxxxx",
"appVersion": "14.57",
"appVersionCode": 1457,
"appWgtVersion": "1.0.0",
"brand": "huawei",
"browserName": "chrome",
"browserVersion": "114.0.5735.196",
"deviceBrand": "huawei",
"deviceId": "xxxxxxxxx",
"deviceModel": "ELE-AL00",
"deviceOrientation": "portrait",
"devicePixelRatio": 3,
"deviceType": "phone",
"isUniAppX": false,
"language": "zh-CN",
"model": "ELE-AL00",
"oaid": "xxxxxxxxx",
"osAndroidAPILevel": 29,
"osLanguage": "zh-CN",
"osName": "android",
"osTheme": "light",
"osVersion": "10",
"pixelRatio": 3,
"platform": "android",
"romName": "HarmonyOS",
"romVersion": "4.0.0",
"safeArea": {
"left": 0,
"right": 360,
"top": 34,
"bottom": 738,
"width": 360,
"height": 704
},
"safeAreaInsets": {
"top": 34,
"right": 0,
"bottom": 0,
"left": 0
},
"screenHeight": 738,
"screenWidth": 360,
"statusBarHeight": 34,
"system": "Android 10",
"ua": "Mozilla/5.0 (Linux; Android 10; ELE-AL00 Build/HUAWEIELE-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/114.0.5735.196 Mobile Safari/537.36 uni-app (Immersed/34.0)",
"uniCompileVersion": "4.57",
"uniCompilerVersion": "4.57",
"uniPlatform": "app",
"uniRuntimeVersion": "4.57",
"version": "1.9.9.82388",
"windowBottom": 0,
"windowHeight": 738,
"windowTop": 0,
"windowWidth": 360,
"errMsg": "getSystemInfo:ok"
}

更多关于华为手机调用 uni-app requestAndroidPermission 后成功和失败回调都没触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

直接调用uni.chooseImage不是可以唤起权限?

更多关于华为手机调用 uni-app requestAndroidPermission 后成功和失败回调都没触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html


就是因为直接调用 uni.chooseImage 无法唤起,我才加的判断权限,然后发现请求权限也有问题

回复 RongCloud: hbuilderx降版本应该可以用吧,可以的话就是更新出问题了

发一下代码

代码在操作步骤中已发,就是简单的调用 chooseImage 接口,您简单写一个调用然后云打包后在华为手机上试一下。

plus.android.requestPermissions请求权限

调用之后成功和失败回调都没响应,不知道为啥,我暂时用离线打包解决了。

这是一个典型的华为设备权限问题。根据你的描述,问题核心在于requestAndroidPermission回调未触发,导致无法正确处理权限请求。

主要原因可能是华为设备对权限管理的特殊处理机制。建议尝试以下解决方案:

  1. 确保manifest.json中已声明所需权限:
{
  "android": {
    "permissions": [
      "android.permission.READ_EXTERNAL_STORAGE",
      "android.permission.WRITE_EXTERNAL_STORAGE"
    ]
  }
}
  1. 使用更可靠的权限检查方式:
uni.getSystemSetting({
  success(res) {
    if(!res.storageAuthorized) {
      uni.showModal({
        content: '需要存储权限',
        success: (res) => {
          if(res.confirm) {
            uni.openSetting()
          }
        }
      })
    }
  }
})
  1. 对于华为设备,建议在调用chooseImage前先手动检查权限状态:
uni.authorize({
  scope: 'scope.writePhotosAlbum',
  success() {
    uni.chooseImage({...})
  },
  fail() {
    uni.showModal({
      content: '请授权访问相册',
      success: (res) => {
        if(res.confirm) {
          uni.openSetting()
        }
      }
    })
  }
})
回到顶部