android - 无法访问 Android Q 中的存储空间
问题描述
尽管具有读写权限,但我无法在 Android 10 中访问 sdcard。这是我列出所有目录的方法。
File root = new File("/mnt/sdcard/");
File[] subFiles = root.listFiles();
for(File file : subFiles) {
if(file.isDirectory()) {
String str = text.getText().toString() + "\n";
str+=file.getAbsolutePath();
text.setText(str);
}
}
如果我使用/mnt/
而不是,/mnt/sdcard/
我可以看到sdcard
目录在其中列出,但是当我使用时/mnt/sdcard/
,subFiles
是null
. 我不知道这是否与新的 android 10 版本有关,或者是模拟器的问题。我正在使用 android studio 的默认模拟器进行调试。
解决方案
这是一个临时解决方案。从 Android 11 起,必须使用范围存储。
该问题requestLegacyExternalStorage
未true
在清单文件中设置。由于默认情况下对外部存储的范围访问,它false
在 Android 10 或更高版本中设置为。添加这一行AndroidManifest.xml
解决了我的问题。
<manifest ... >
<!-- This attribute is "false" by default on apps targeting
Android 10 or higher. -->
<application
android:requestLegacyExternalStorage="true" ........ >
......
</application>
</manifest>
推荐阅读
- bazel - 以字符串形式获取相对于 BUILD 文件的文件路径
- php - 如何在 Laravel 5 中使用会话
- r - 如何加快 grepl 函数的执行速度?
- android - 使用 MaterialDesignComponents 在 RecyclerView Scroll 上隐藏 AppBarLayout
- c++ - 条件类模板构造函数
- sql - 如何连接包裹在'字符周围的字符串
- powershell - 如何组合字符串输入并动态生成数组?
- linux - 确定 Nemo 上下文菜单操作顺序
- spring-boot - 如何实时更新数据
- java - 如何弄清楚 model.getName() 指向 Firebase 中的内容