uni-app小程序拉不起安卓相册 报错code:12 权限已给

发布于 1周前 作者 gougou168 来自 Uni-App

uni-app小程序拉不起安卓相册 报错code:12 权限已给

操作步骤:

预期结果:

实际结果:

bug描述:

uniapp拉不起安卓相册,权限已给。如附件视频。

信息项 内容
产品分类 uni小程序SDK
手机系统 Android
手机系统版本 Android 13
手机厂商 华为
手机机型 huaweimate60pro
页面类型 vue
SDK版本号 4.24
App下载地址 https://d.ynyapp.com

2 回复

你提供的附件是个视频,需要提供一下可以复现问题的示例工程


在开发uni-app小程序时遇到无法拉起安卓相册并报错code:12的问题,通常是由于权限配置或调用方法不当引起的。尽管你已经提到权限已给,但可能仍需要检查几个关键方面以确保一切配置正确。以下是一些常见的检查步骤和代码示例,帮助你解决该问题。

1. 检查manifest.json权限配置

确保在manifest.json文件中已经正确配置了相册权限。对于Android平台,你需要在mp-weixin(或其他对应的小程序平台配置)下添加必要的权限声明,尽管uni-app通常会自动处理这些权限,但手动检查总是一个好习惯。

"mp-weixin": {
    "appid": "your-app-id",
    "setting": {
        "requestDomain": ["your-domain.com"]
    },
    "permission": {
        "scope.userInfo": {
            "desc": "你的用户信息将用于小程序相册功能"
        },
        "scope.userLocation": {
            "desc": "你的地理位置将用于小程序某些功能" // 根据需要添加
        }
        // 注意:相册权限通常不需要在这里特别声明,除非有特定需求
    }
}

2. 使用uni.chooseImage API

确保你正确使用了uni.chooseImage API。以下是一个基本的调用示例:

uni.chooseImage({
    count: 9, // 默认9
    sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
    sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
    success: function (res) {
        console.log(res.tempFilePaths)
    },
    fail: function (err) {
        console.error('chooseImage fail:', err);
        if (err.code === 12) {
            uni.showToast({
                title: '相册权限被拒绝',
                icon: 'none'
            });
        }
    }
});

3. 动态权限请求(针对H5+或原生App封装)

如果你的应用是封装成原生App,而非纯粹的小程序,你可能需要在运行时动态请求权限。虽然小程序环境下通常不需要这样做,但如果是基于5+ App(HBuilderX创建的App),你可能需要用到以下代码:

plus.android.requestPermissions(['android.permission.READ_EXTERNAL_STORAGE'], function(event) {
    if (event.deniedAlways.length > 0) {
        console.error('用户永久拒绝了权限请求');
    } else if (event.denied.length > 0) {
        console.error('用户拒绝了权限请求');
    } else {
        console.log('权限请求成功');
        // 继续调用chooseImage
    }
});

确保在调用相册功能之前,用户已经授予了必要的权限。如果问题仍然存在,建议检查Android设备的系统设置,确认应用是否已被授予存储访问权限,或者在设备的开发者选项中查看是否有影响权限管理的设置。

回到顶部