WRITE_EXTERNAL_STORAGE 针对 Android 10

新手上路,请多包涵

AS 中有一个关于 android.permission.WRITE_EXTERNAL_STORAGE 的 lint 警告。该警告表示,针对 Android 10 及更高版本时,该权限将不再提供写访问权限。删除上述权限仍然可以写入内部存储文件夹 Pictures/MY_APP_NAME 以保存图像,但它仅适用于 Android 10 (SDK 29) 和/或更高版本(尚未在 Android R 上测试)。当我在 Android M (SDK 23) 等较低版本上再次测试时,保存图像停止工作,所以我决定返回 android.permission.WRITE_EXTERNAL_STORAGE 因此警告再次出现。棉绒是否可能只是误报,错误地诊断了不同情况下的问题?因为目前我的支持 SDK 从 21 开始,最新的是 30,但 lint 仅指出在针对 Android 10 (SDK 29) 时不再需要它,并且没有考虑回顾项目的最低 SDK 支持。

原文由 Mihae Kheel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

解决方法是实际上忽略警告,因为它只是信息性的,因此无害。将 maxSdkVersion 设置为 28 就不用再担心了。

 <uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="28"
    tools:ignore="ScopedStorage" />

请注意,使用其他答案中所述的 android:requestLegacyExternalStorage 标志不是解决方案,它只是一个临时补丁,在 Android 11 (API 30) 和未来版本中将不再有效

更新,以澄清一些开发人员在评论中表现出的疑虑和困惑:

  • 如果在 Android 10 (API 29) 中使用 requestLegacyExternalStorage 标志,则照常请求 WRITE_EXTERNAL_STORAGE 权限。

  • 标志 requestLegacyExternalStorageAndroid 11 (API 30) 中不执行任何操作,它被完全忽略,并且没有解决方法。

  • WRITE_EXTERNAL_STORAGEAndroid 11 (API 30) 中不提供任何权限,它什么也不做,因此在 API 11 中您需要将 maxSdkVersion 设置为 29

  • 如果在 Android 10 (API 29) 中您也没有使用 requestLegacyExternalStorage ,则将 maxSdkVersion 设置为 28 而不是 29

  • Android 11 (API 30) 开始,旧的 文件 API 可以再次使用,但“仅”在访问公共“共享存储”文件夹(DCIM、音乐等)或您的应用“私有”目录时使用。对于其他位置,需要 DocumentFile API。

  • 考虑到文件 API 现在在 Android 11 (API 30) 中要慢得多,因为它已经被重构为本质上是一个包装器。这是为了仅在允许的位置强制使用它。因此,它不再是一个快速的系统文件 API,而只是一个在内部将工作委托给 MediaStore 的包装器。在 Android 11 或更高版本中使用文件 API 时,您应该考虑性能损失,因为根据 Android 团队的说法,这比直接访问 MediaStore 慢 2 到 3 倍。

原文由 PerracoLabs 发布,翻译遵循 CC BY-SA 4.0 许可协议

尝试将此添加到您的清单中:

 <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:requestLegacyExternalStorage="true" //Add this Line
android:label="@string/app_name">

 ---------<Activity, Sevices or Recivers>----------

</application>

并再次删除 READ_EXTERNAL_STORAGE 权限:

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

原文由 Francesco Bocci 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题