基于Expo SDK53的Android应用突发MEDIA_LIBRARY权限缺失问题求助
问题
我开发的一款基于Expo SDK 53的Android应用,近期在向相册添加照片时突然出现「Missing MEDIA_LIBRARY permissions」错误。该应用允许用户通过expo-camera拍摄照片,照片既保存在应用内供后续使用,也同步保存到用户相册供外部调用。应用最后一次更新发布于3月初,此前数月已有大量用户正常使用该拍照功能。
保存照片到相册的核心逻辑代码如下:
// note that at this point the user has already given the permissions by calling the function usePermissions() from expo-media-library // File as defined by expo-file-system/next (for sdk53) let photo = new File(imageUri) const asset = await MediaLibrary.createAssetAsync(photo.uri) // albumName is a string created on some other variables const album = await MediaLibrary.getAlbumAsync(albumName)
调用getAlbumAsync时触发了MEDIA_LIBRARY权限错误。此外,为通过Google Play Store政策审核,我在app.json中屏蔽了以下权限:
"blockedPermissions": [ "android.permission.MANAGE_EXTERNAL_STORAGE", "android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.READ_MEDIA_IMAGES", "android.permission.READ_MEDIA_VIDEO" ],
请问为何未进行代码修改或应用更新的情况下,突然出现此问题?是否与Google Play政策静默更新有关?
分析与解决方案
核心原因
- 权限依赖不匹配:
getAlbumAsync属于读取相册列表的操作,Android 13+明确要求READ_MEDIA_IMAGES权限才能执行该操作。你在app.json中主动屏蔽了这个权限,之前未触发错误可能是因为:- 早期用户设备多为Android 12及以下,当时
WRITE_EXTERNAL_STORAGE权限可覆盖读写操作; - Google Play的权限合规检测近期收紧,对已发布应用的权限拦截逻辑强制执行变严;
- 部分用户近期升级到Android 13+,触发了新的权限校验规则。
- 早期用户设备多为Android 12及以下,当时
- 权限请求不完整:你提到已调用
usePermissions(),但该方法可能仅请求了媒体库的写入权限,未覆盖读取权限(获取相册列表需要读取权限),加上权限被屏蔽,直接触发权限缺失错误。
解决步骤
- 移除不必要的权限屏蔽:从
blockedPermissions中删除android.permission.READ_MEDIA_IMAGES,该权限是获取相册列表的必要权限,符合Google Play的合规要求(仅用于读取相册列表,不属于过度权限)。 - 补充权限请求:在调用
getAlbumAsync前,明确请求读取权限:const { status } = await MediaLibrary.requestPermissionsAsync({ mediaLibrary: ['read', 'write'] }); if (status !== 'granted') { // 处理权限拒绝逻辑 return; } - 替代方案(若不想请求读取权限):可以跳过
getAlbumAsync,直接尝试创建目标相册(若相册已存在则不会重复创建),再添加资产:const album = await MediaLibrary.createAlbumAsync(albumName, asset, false); // 第三个参数为false时,若相册已存在则返回现有相册,不会报错
内容的提问来源于stack exchange,提问作者Stefano Gilotto
相关产品推荐
相关产品推荐

