繁体   English   中英

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

[英]Test programmatically if in Android 10+ the legacy external storage access is disabled

是否有一个简单的 API 调用可以告诉我在 Android 10 或更高版本上运行的应用程序是否必须使用范围存储访问,也就是说,如果正常文件访问,即“传统外部存储”被禁用? 请注意,即使应用程序在 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中的这两种方法:

此值可能与应用清单中requestLegacyExternalStorage请求的值不同,因为应用可能会根据首次安装时间继承其旧版 state。

非旧版应用程序可以继续通过MediaStore发现和读取属于其他应用程序的媒体。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM