gpt4 book ai didi

android - 针对 Android 10 时的 WRITE_EXTERNAL_STORAGE

转载 作者:行者123 更新时间:2023-12-03 07:36:36 25 4
gpt4 key购买 nike

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因此警告再次出现。 Lint 是否可能只是误报,在不同情况下错误地诊断出问题?因为目前我的支持 SDK 从 21 开始到最新的 30,但 lint 仅指出在针对 Android 10(SDK 29)时不再需要它,并且没有考虑回顾项目的最低 SDK 支持。

最佳答案

一种解决方法是实际上忽略警告,因为它只是提供信息,因此无害。通过设置 maxSdkVersion 28 再也不用担心了。

<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28"
tools:ignore="ScopedStorage" />
请注意,使用 android:requestLegacyExternalStorage 其他答案中所述的标志不是解决方案,只是一个临时补丁,在 中将不再有效安卓 11 (API 30) ,以及 future 的版本
更新,以澄清一些开发人员在评论中表现出的疑虑和困惑:
  • 如果使用 requestLegacyExternalStorage 中的标志安卓 10 (API 29) 然后请求 WRITE_EXTERNAL_STORAGE 像往常一样获得许可。
  • 旗帜 requestLegacyExternalStorage 中什么都不做安卓 11 (API 30) ,它被完全忽略,并且没有解决方法。
  • WRITE_EXTERNAL_STORAGE 不授予 中的任何权限安卓 11 (API 30) ,它什么都不做,因此在 API 11 您需要设置 maxSdkVersion 29 .
  • 如果在 安卓 10 (API 29) 你也没有使用 requestLegacyExternalStorage 然后设置 maxSdkVersion 28 而不是 29 .
  • 开始安卓 11 (API 30) , 较早的 文件 API 可以再次使用,但“仅”在访问公共(public)“共享存储”文件夹(DCIM、音乐等)或您的应用程序“私有(private)”目录时使用。对于其他位置,文档文件 需要 API。
  • 考虑到文件 API 现在在 中要慢得多。安卓 11 (API 30) ,因为已经被重构为本质上是一个包装器。这是为了强制其仅在允许的位置使用。因此,它不再是一个快速的系统文件 API,而只是一个在内部将工作委托(delegate)给 MediaStore 的包装器。在 Android 11 或更高版本中使用 File API 时,您应该考虑性能损失,因为根据 Android 团队的说法,它会比直接访问 MediaStore 慢 2 到 3 倍。
  • 关于android - 针对 Android 10 时的 WRITE_EXTERNAL_STORAGE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64221188/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com