在使用数月后,MEDIA_LIBRARY权限突然缺失

移动开发 2026-07-09

最近我使用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章