在使用数月后,MEDIA_LIBRARY权限突然缺失
最近我使用Expo SDK 53开发的一个Android应用在向相册添加照片时,遇到了缺少MEDIA_LIBRARY权限的错误。
简要地说,该应用允许用户使用expo-camera拍摄一些照片。这些照片不仅会保存在应用内以便后续使用,还会保存在用户的照片相册中,供外部使用。
为什么这个错误现在才出现?该应用最近一次更新在三月初发布,应用使用广泛,我也有证据表明,在过去的几个月里,许多用户在使用这项特定的拍照功能时,使用的是最新的Android更新。
将此类应用保存到相册的过程基于以下通用代码:
// 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错误。
在我的 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商店政策审核流程。
这个问题在没有任何代码修改或更新的情况下,为什么最近才出现?这是否可能与Google Play政策的静默更新有关?
解决方案
操作系统对在特定时间授予或拒绝哪些权限拥有最终决定权,并且在系统更新时应用可能会丢失某些权限。
不要阻塞权限,请让应用在权限状态变化时优雅地处理。
const [permissionResponse, requestPermission] = MediaLibrary.usePermissions({
writeOnly: true,
granularPermissions: ['photo'],
});
if(permissionResponse.status !== "granted" || !permissionResponse.canAskAgain){
// show error to indicate that user can use Media library
return;
}
// 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)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。