uni-app 系统显示读写相册权限都在开启 但获取权限状态还是-1
uni-app 系统显示读写相册权限都在开启 但获取权限状态还是-1
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 10 | HBuilderX |
操作步骤:
- 下载安装后,正常打开扫码,授权,但还是读写失败
预期结果:
- 授权成功,并打开相册
实际结果:
- 授权失败,未打开
bug描述:
- 好像是版本问题,4.29版本会有这个问题,但用4.24版本不存在这个问题
App下载地址或H5网址:
更多关于uni-app 系统显示读写相册权限都在开启 但获取权限状态还是-1的实战教程也可以访问 https://www.itying.com/category-93-b0.html
android 14上安卓系统已经废弃了存储权限。
更多关于uni-app 系统显示读写相册权限都在开启 但获取权限状态还是-1的实战教程也可以访问 https://www.itying.com/category-93-b0.html
和这个没关系的,我用4.24版本打包的app是能正常存入图片的,但4.29版本就不行,我测了,和版本应该没关系,我用android13测也一样的
回复 3***@qq.com: 我的说法有问题,可以参考一下谷歌原生的文档描述:https://developer.android.com/reference/android/Manifest.permission#WRITE_EXTERNAL_STORAGE
针对你提到的uni-app中系统显示读写相册权限都已开启,但获取权限状态仍为-1的问题,这通常意味着应用在实际运行时未能正确检测到或获取到这些权限。以下是一些可能的解决方案和相关的代码案例,用于帮助你检查和修复这个问题。
1. 检查权限请求代码
首先,确保你的应用中正确请求了读写相册的权限。在uni-app中,你可以使用uni.authorize
或uni.getSetting
来检查权限状态,并使用uni.requestAuthorize
来请求权限。
检查权限状态
uni.getSetting({
success: function(res) {
console.log('相册读权限:', res.authSetting['scope.writePhotosAlbum']);
console.log('相册写权限:', res.authSetting['scope.readPhotosAlbum']);
}
});
请求权限
uni.requestAuthorize({
scope: 'scope.writePhotosAlbum,scope.readPhotosAlbum',
success: function() {
console.log('权限请求成功');
},
fail: function() {
console.log('权限请求失败');
}
});
2. 监听权限变化
有时权限状态可能会在应用运行过程中发生变化(例如,用户手动在系统设置中更改了权限)。你可以监听权限变化事件来适时处理。
uni.onPermissionChange(function(res) {
if (res.type === 'scope.writePhotosAlbum' || res.type === 'scope.readPhotosAlbum') {
console.log('相册权限发生变化:', res.status);
// 根据res.status更新UI或执行其他逻辑
}
});
3. 错误处理
如果获取权限状态返回-1,可能意味着在调用相关API时发生了错误。确保你正确处理了这些错误,并给出了用户友好的提示。
function checkAndRequestPermissions() {
uni.getSetting({
success: function(res) {
if (!res.authSetting['scope.writePhotosAlbum'] || !res.authSetting['scope.readPhotosAlbum']) {
uni.requestAuthorize({
scope: 'scope.writePhotosAlbum,scope.readPhotosAlbum',
success: function() {
// 权限请求成功后的逻辑
},
fail: function() {
// 权限请求失败,提示用户去设置中手动开启
uni.showModal({
title: '提示',
content: '需要您授权相册权限才能继续使用',
showCancel: false,
success: function(modalRes) {
if (modalRes.confirm) {
// 跳转到系统设置页面(注意:不是所有平台都支持)
uni.navigateToMiniProgram({
appId: '系统小程序的appId', // 这里需要替换为实际的系统小程序appId
path: 'pages/index/index',
success: function() {
console.log('跳转到系统设置成功');
},
fail: function() {
console.log('跳转到系统设置失败');
}
});
}
}
});
}
});
} else {
// 权限已开启,执行相关操作
}
}
});
}
// 调用函数检查并请求权限
checkAndRequestPermissions();
以上代码提供了检查、请求和处理相册权限的完整流程。如果问题依旧存在,请检查是否有其他代码或配置影响了权限的获取,或尝试在不同设备或模拟器上测试以排除特定环境问题。