如何将 expo-image-picker 与 android 11 范围存储一起使用?

Posted

技术标签:

【中文标题】如何将 expo-image-picker 与 android 11 范围存储一起使用?【英文标题】:how to use expo-image-picker with android 11 scoped storage? 【发布时间】:2021-07-18 06:14:06 【问题描述】:

我在我的 expo 管理的 react 本机应用程序中使用了 expo-image-picker。它工作正常。 我只需要使用相机拍摄新照片并为我的应用从图库中挑选照片。 对于这些,我使用了以下 API

ImagePicker.requestMediaLibraryPermissionsAsync()
ImagePicker.requestCameraPermissionsAsync()

ImagePicker.launchImageLibraryAsync()
ImagePicker.launchCameraAsync()

对于 android,我在 app.json 文件中的权限数组如下

"permissions": [
        "CAMERA",
        "CAMERA_ROLL",
        "READ_EXTERNAL_STORAGE",
        "WRITE_EXTERNAL_STORAGE",
        "LOCATION"
      ]

现在谷歌给我发了这封电子邮件

我们检测到您的应用包含 requestLegacyExternalStorage 在您的 1 个或多个 app bundle 或 APK 的清单文件中标记。

在运行 Android 11+ 的设备上拥有应用的开发者必须使用 Scoped 存储让用户更好地控制他们的设备存储。 要在 5 月 5 日之后在 Android 11 或更高版本上发布您的应用,您必须 要么:

更新您的应用以使用对隐私更友好的最佳做法,例如 存储访问框架或媒体商店 API 将您的应用更新为 在中声明所有文件访问 (MANAGE_EXTERNAL_STORAGE) 权限 清单文件,并完成所有文件访问权限 从 5 月 5 日起在 Play 管理中心中声明删除所有文件访问权限 完全来自您的应用的许可对于面向 Android 11 的应用, requestLegacyExternalStorage 标志将被忽略。您必须使用 保留广泛访问权限的所有文件访问权限。

请求访问所有文件访问权限的应用程序没有 允许的使用将从 Google Play 中删除,您将无法使用 发布更新。

谁能帮我解决这个问题? 我需要更改我的图像选择器 api 中的任何内容吗?或者我需要从我的权限数组中添加/删除一些东西吗? 请帮助我...请...

【问题讨论】:

你确定这个图像选择器会导致问题吗?然后..如果有 ACTION_GET_CONTENT 或 ACTION_OPEN_DOCUMENT,你为什么要使用这样的图像选择器? We've detected that your app contains the requestLegacyExternalStorage flag in the manifest file 好的。所以这将是一个问题。然后我们读了the requestLegacyExternalStorage flag will be ignored. 好了..那么问题出在哪里? @blackapps 你能分享任何显示使用 ACTION_GET_CONTENT 和 ACTION_OPEN_DOCUMENT 的工作 sn-p 吗? 你最好自己作为互联网采取行动,而且这个网站充满了使用示例。 哦...太好了..谢谢...你真的帮了很多忙...@blackapps 【参考方案1】:

找到解决方案。 实际上我的代码没有问题。是谷歌让我感到困惑。 这是详细信息https://github.com/expo/expo/issues/12603#issuecomment-827600227

【讨论】:

以上是关于如何将 expo-image-picker 与 android 11 范围存储一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应本机博览会应用程序(android)中授予相机权限

React Native - 直接打开安卓图库

在 expo/react-native 中发送图像时随机出现“错误处理请求正文”

如何将嵌套字典列表与它们的值中的公共键相加? [复制]

如何将 libcurl 与 dev c++ 静态链接?

如何将数组的每个元素与同一数组的其他元素相加?