【发布时间】:2022-02-01 15:35:34
【问题描述】:
众所周知,Google 将授权概念从 Android 11 颠倒过来,彻底改变了它。
我查看了 Android 文档丛林,但没有找到关于是否仍然可以在外部存储的根目录(名为 /storage/emulated/0/)中创建文件夹的问题的答案。 如果是,怎么做?
我的应用在 android
临时解决方案可能是这样的:
public static String getStorageDir(){
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).getAbsolutePath() + "/myNewFolder";
....
} else {
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/myNewFolder";
...
}
但这不是最理想的。如果用户从 Android 10 切换到 Android 11+,那么就会出现大问题。我需要哪些额外的代码才能在 Android 11+ 上的 ROOT 中创建文件夹?
据称 Google Play 直接拒绝“MANAGE_ALL_FILES”权限。这是真的吗?现在仍然如此吗?有人有这方面的经验吗?
【问题讨论】:
-
为什么不在像 Documents 这样的公共目录中创建文件夹?
-
“我需要什么额外的代码才能在 Android 11+ 的 ROOT 中创建文件夹?” - 这不是大多数应用程序的选项。您唯一可行的选择是
MANAGE_EXTERNAL_STORAGE,正如您所指出的,这可能会导致您的应用被 Google 拒绝。正如 blackapps 在回答中建议的那样,使用ACTION_OPEN_DOCUMENT_TREE,并让用户决定用户希望您将用户内容放在用户设备(或用户的云存储)中的哪个位置。 -
@blackapps:如上所述,这是可能的,但更适合 Android11+ 的用户。如果用户之前拥有 Android 10 并切换到 11,则会出现问题。当然,在这种情况下,用户可以将内容从旧文件夹复制到 Documents 中的新文件夹,但并不是每个人都精通技术。如果它能够继续工作而没有任何问题和用户活动,那就更优雅了。
-
没有理由复制内容。一切都可以留在原地。只需让用户选择一次旧目录即可。
标签: java android android-permissions