uni-app 系统显示读写相册权限都在开启 但获取权限状态还是-1

uni-app 系统显示读写相册权限都在开启 但获取权限状态还是-1

开发环境 版本号 项目创建方式
Windows 10 HBuilderX

操作步骤:

  • 下载安装后,正常打开扫码,授权,但还是读写失败

预期结果:

  • 授权成功,并打开相册

实际结果:

  • 授权失败,未打开

bug描述:

  • 好像是版本问题,4.29版本会有这个问题,但用4.24版本不存在这个问题

Image Image

App下载地址或H5网址:


更多关于uni-app 系统显示读写相册权限都在开启 但获取权限状态还是-1的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

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.authorizeuni.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();

以上代码提供了检查、请求和处理相册权限的完整流程。如果问题依旧存在,请检查是否有其他代码或配置影响了权限的获取,或尝试在不同设备或模拟器上测试以排除特定环境问题。

回到顶部