gpt4 book ai didi

java - requestLegacyExternalStorage 在 Android 11 - API 30 中不起作用

转载 作者:行者123 更新时间:2023-12-03 10:03:45 33 4
gpt4 key购买 nike

Google 最近在 API 29 中引入了一些与存储 API 相关的更改,例如范围存储,我们通过在 Manifest 中添加“requestLegacyExternalStorage=true”来选择退出。但是现在当我以 SdkVersion 30 为目标时,这似乎不再起作用。此更改后,下载目录中的某些文件未列出 (File.listFiles)。

最佳答案

But now when I targetSdkVersion 30, this no longer seems to work


那是对的。 Android 11 (API 30+) requestLegacyExternalStorage=true什么都不做,你不能再“选择退出”。它在 Android 10 中可用,为开发人员提供过渡/宽限期,以便能够迁移到范围存储模型。
选项 1:迁移应用程序中的数据,同时仍以 API 29 为目标,一旦迁移的数据与范围存储兼容,您应该能够发布针对 API 30 的更新 - https://developer.android.com/training/data-storage/use-cases
如果用户跳过此版本并直接从以前的版本更新到最新版本,并且您遇到无法访问的未迁移数据,这可能会带来其自身的问题。
选项 2:Google 似乎看到了这个明显的警告,并包含了 preserveLegacyExternalStorage=true面向 API 30 以允许您迁移数据时的选项。 https://developer.android.com/reference/android/R.attr#preserveLegacyExternalStorage
展望 future ,您可以引用此表来根据用例决定使用什么存储“框架”: https://developer.android.com/training/data-storage
有些应用程序可能根本无法成功迁移,这取决于它们与 File 的交互方式。 API 作为 Google 的解决方案不会涵盖所有当前用例,并且可能没有迁移路径。
例如,几年前我发布了一个应用程序,允许用户使用 MediaStore 更新专辑封面。和 ContentResolver更新专辑封面图像的数据 - 这存储在共享存储中。看过 Android 10+ AOSP MediaProvider源代码似乎曾经使用 MediaStore 的应用程序更新专辑封面以指向数据文件不再有效,仅仅是因为 MediaProvider在隐藏的 .thumbnails 内部创建自己的艺术品文件夹直接查看 mp3 并使用 MediaExtractor ,并且从不引用 ContentValues插入以引用艺术品。因此,即使您可以自己更新艺术品,也请查询 MediaStore为它看它,其他应用必须使用 ContentResolver#loadThumbnail在 API 29+ 中,它不引用您更新的值,要么懒惰地创建艺术品,要么在 .thumbnails 中选择已生成的文件文件夹。显然,这些都没有记录在案,我的应用程序遭到了负面评论的强烈反对,但这些变化是破坏性的变化,完全超出了我的控制,让我查看了 AOSP 源代码,发现 Android 从根本上改变了行为。
(这不是咆哮,而是一个示例,说明这些更改如何因为 AOSP 的基本未记录行为而无法提供迁移路径)。

关于java - requestLegacyExternalStorage 在 Android 11 - API 30 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63364476/

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