华为手机调用 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
直接调用uni.chooseImage不是可以唤起权限?
更多关于华为手机调用 uni-app requestAndroidPermission 后成功和失败回调都没触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html
就是因为直接调用 uni.chooseImage 无法唤起,我才加的判断权限,然后发现请求权限也有问题
回复 RongCloud: hbuilderx降版本应该可以用吧,可以的话就是更新出问题了
发一下代码
代码在操作步骤中已发,就是简单的调用 chooseImage 接口,您简单写一个调用然后云打包后在华为手机上试一下。
plus.android.requestPermissions请求权限
调用之后成功和失败回调都没响应,不知道为啥,我暂时用离线打包解决了。
这是一个典型的华为设备权限问题。根据你的描述,问题核心在于requestAndroidPermission回调未触发,导致无法正确处理权限请求。
主要原因可能是华为设备对权限管理的特殊处理机制。建议尝试以下解决方案:
- 确保manifest.json中已声明所需权限:
{
"android": {
"permissions": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE"
]
}
}
- 使用更可靠的权限检查方式:
uni.getSystemSetting({
success(res) {
if(!res.storageAuthorized) {
uni.showModal({
content: '需要存储权限',
success: (res) => {
if(res.confirm) {
uni.openSetting()
}
}
})
}
}
})
- 对于华为设备,建议在调用chooseImage前先手动检查权限状态:
uni.authorize({
scope: 'scope.writePhotosAlbum',
success() {
uni.chooseImage({...})
},
fail() {
uni.showModal({
content: '请授权访问相册',
success: (res) => {
if(res.confirm) {
uni.openSetting()
}
}
})
}
})