现象描述:
VIVO(Y36 安卓13) OPPO(PJU110 安卓14)这两款机型,用户授权后,打开相册无图片可选,但是手动关闭某一项权限后(系统会提示,关闭会连带其他权限一起关闭,如:照片和视频、音频文件),在手动开启,权限后,相册中就有图片可以选择。有懂的大佬能帮忙看一下嘛?到底是权限没弄好,还是bug。
我查阅部分咨询,有些地方说还需要加一个文件和文档权,但是这个权限没办法用户获取,我实际打包之后,这个权限调用的时候都是true,只有基础基座测试才会走进false的逻辑中,包括自定义基座也是true。下列有我权限列表的截图(安卓14
)
// manifest.json 权限部分
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.READ_MEDIA_AUDIO\" />",
"<uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\" />",
"<uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\" />"
// 手机端获取权限部分代码 我是用uni.addInterceptor 监听chooseImage的
function isManageAllFilesGranted() {
try {
const Environment = plus.android.importClass('android.os.Environment');
const File = plus.android.importClass('java.io.File');
const testFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
const canRead = testFile.canRead();
console.log('Environment.isExternalStorageManager()', Environment.isExternalStorageManager());
console.log('testFile.canRead()', canRead);
if (canRead) return true;
return Environment.isExternalStorageManager();
} catch (err) {
console.error('checkManageAllFilesPermission failed:', err)
return false
}
}
async function chooseMedia({ type = 'image' }) {
try {
const cameraStatus = await permisionUtil.requestAndroidPermission('android.permission.CAMERA')
const mediaPermission = osAndroidAPILevel >= 33
? type === 'video'
? 'android.permission.READ_MEDIA_VIDEO'
: 'android.permission.READ_MEDIA_IMAGES'
: 'android.permission.READ_EXTERNAL_STORAGE';
const mediaStatus = await permisionUtil.requestAndroidPermission(mediaPermission);
const audioStatus = osAndroidAPILevel >= 33
? await permisionUtil.requestAndroidPermission('android.permission.READ_MEDIA_AUDIO')
: 1;
let hasManageAllFiles = true;
if (osAndroidAPILevel >= 30) {
hasManageAllFiles = isManageAllFilesGranted();
if (!hasManageAllFiles) {
setModalContent('我们需要您授予“文件和文档访问”权限,才能正常访问相册内容,请前往设置开启权限。');
}
}
console.log('摄像头使用权:cameraStatus',cameraStatus)
console.log('图库使用权:imageStatus',mediaStatus)
console.log('音频使用权:audioStatus',audioStatus)
console.log('文件文档使用权:hasManageAllFiles',hasManageAllFiles)
if (cameraStatus === 1 && mediaStatus === 1 && audioStatus === 1 && hasManageAllFiles) {
return 1;
} else {
return -1;
}
} catch (e) {
console.error(`${type} 权限申请异常`, e);
return 0;
}
}
chooseImage: () => chooseMedia({ type: 'image' })
chooseVideo: () => chooseMedia({ type: 'video' })
4***@qq.com (作者)
下载地址和manifest.json私信您了。我这边也是部分机型有这个情况,红米K70 安卓14、VIVOIQOO 安卓10这两部手机正常
2025-07-31 19:05
4***@qq.com (作者)
目前主要是这种情况,以安卓14举例:
云打包后的APP,使用相册API前,我获取权限(摄像头、照片与视频、音频文件)允许APP需要的权限后,就拉起相册,相册内始终没图片,去权限管理查看,括号内的三个权限全是允许状态的。然后手动关闭相册权限会提示会一起关闭掉音频文件权限,随即打开权限,重新打开APP,相册就有图片了。
且我也试过,只要成功手动打开过一次权限,后面几遍手动拒绝了,APP重新获取到权限,也可以正常使用相册
2025-07-31 19:11
DCloud_Android_zl
回复 4***@qq.com: 你出一个简单的能复现的示例给我一下吧,我这边按照你的配置都走了一遍,没能复现问题。
2025-08-01 16:55
4***@qq.com (作者)
回复 DCloud_Android_zl: 您好,我将相关文件更新在帖子上了,以防你能看不到,也给您私信了一份,分别是简化demo的压缩包,和我复现的视频文件。目前该情况,主要是出现在部分老旧机型,公司买的测试开发手机。(大多都是VIVO OPPO 公司的开发手机都基本是这个品牌,开发者24年10月红米K70 Ultra允许权限后打开相册是正常的 )
2025-08-01 19:56