gpt4 book ai didi

android - 如果在 Android 10+ 中禁用旧版外部存储访问,则以编程方式测试

转载 作者:行者123 更新时间:2023-12-04 04:23:45 24 4
gpt4 key购买 nike

是否有一个简单的 API 调用可以告诉我在 Android 10 或更高版本上运行的应用程序是否必须使用 Scoped Storage 访问,也就是说,如果普通文件访问,也就是“旧版外部存储”被禁用?请注意,即使应用程序在 AndroidManifest.xml 部分声明:

  android:requestLegacyExternalStorage="true"

由于将来谷歌政策的变化,文件访问仍然可能被拒绝,所以测试这个值是没有用的。我发现的唯一方法是测试外部存储根目录是否可读,但为此,应用程序必须首先请求存储权限,如果禁用旧版存储,这对其他任何事情都无用。
public static boolean mustUseScopedStorage() {
// Impractical must first ask for useless Storage permission...
File exSD = Environment.getExternalStorageDirectory();
return !exSD.canRead(); // this test works only if Storage permission was granted.
}

我想我曾经看过一个新的 API 来检测这一点,但再也找不到那篇文章了……

最佳答案

您可以从 android.os.Environment 使用这两种方法:

  • isExternalStorageLegacy(File path)

    Returns whether the shared/external storage media at the given path is a legacy view that includes files not owned by the app.


  • isExternalStorageLegacy()

    Returns whether the primary shared/external storage media is a legacy view that includes files not owned by the app.



  • This value may be different from the value requested by requestLegacyExternalStorage in the app's manifest, since an app may inherit its legacy state based on when it was first installed.

    Non-legacy apps can continue to discover and read media belonging to other apps via MediaStore.


    如果您发现您可以访问旧存储,我个人认为最好将数据迁移到范围存储并改用它,因为旧存储可能会在没有警告的情况下停止工作。

    关于android - 如果在 Android 10+ 中禁用旧版外部存储访问,则以编程方式测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58274396/

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