uni-app uni.chooseImage 在安卓13以上版本,第一次允许授权后选择图片仍然返回没有权限的问题 TagVersion33
uni-app uni.chooseImage 在安卓13以上版本,第一次允许授权后选择图片仍然返回没有权限的问题 TagVersion33
请问下解决了吗,我也遇到了这个问题
安卓 33 暂时先每次chooseImage 之前先用plus去检查权限,获取权限
在 Android 13(API 级别 33)及以上版本中,权限管理机制发生了变化,特别是对于媒体文件(如图片、视频、音频)的访问权限。Android 13 引入了更细粒度的媒体权限控制,要求应用明确请求访问特定类型的媒体文件(如 READ_MEDIA_IMAGES
、READ_MEDIA_VIDEO
、READ_MEDIA_AUDIO
)。
如果你在使用 uni.chooseImage
时遇到第一次允许授权后仍然返回没有权限的问题,可能是由于以下原因:
1. 权限未正确请求
在 Android 13 及以上版本,应用需要明确请求 READ_MEDIA_IMAGES
权限才能访问用户的图片。你需要在 manifest.json
文件中声明这些权限,并在运行时请求它们。
在 manifest.json
中添加权限:
{
"permission": {
"android.permission.READ_MEDIA_IMAGES": {}
}
}
在代码中请求权限:
uni.authorize({
scope: 'scope.writePhotosAlbum',
success: function () {
console.log('授权成功');
// 授权成功后调用 uni.chooseImage
uni.chooseImage({
count: 1,
success: function (res) {
console.log('选择图片成功', res.tempFilePaths);
},
fail: function (err) {
console.log('选择图片失败', err);
}
});
},
fail: function (err) {
console.log('授权失败', err);
}
});
2. 权限请求流程问题
Android 13 的权限请求流程可能与之前的版本有所不同。确保在调用 uni.chooseImage
之前,已经成功获取了所需的权限。
3. 权限未正确处理
在 Android 13 及以上版本,用户可能会选择授予部分权限(例如,只允许访问部分图片),或者在某些情况下,权限请求可能被拒绝。你需要在代码中处理这些情况,并确保在权限被拒绝后,能够引导用户手动授予权限。
4. 检查应用的目标 SDK 版本
确保你的应用的目标 SDK 版本设置为 33 或更高,以确保 Android 13 的新权限机制被正确应用。
5. 使用 uni.getSetting
检查权限状态
在调用 uni.chooseImage
之前,可以使用 uni.getSetting
检查当前的权限状态,确保权限已经授予。
uni.getSetting({
success: function (res) {
if (res.authSetting['scope.writePhotosAlbum']) {
// 已经授权,可以调用 uni.chooseImage
uni.chooseImage({
count: 1,
success: function (res) {
console.log('选择图片成功', res.tempFilePaths);
},
fail: function (err) {
console.log('选择图片失败', err);
}
});
} else {
// 未授权,请求权限
uni.authorize({
scope: 'scope.writePhotosAlbum',
success: function () {
console.log('授权成功');
// 授权成功后调用 uni.chooseImage
uni.chooseImage({
count: 1,
success: function (res) {
console.log('选择图片成功', res.tempFilePaths);
},
fail: function (err) {
console.log('选择图片失败', err);
}
});
},
fail: function (err) {
console.log('授权失败', err);
}
});
}
}
});