我正在为Android 8.0开发一个 Android 应用程序,我需要在其中打开/读取和删除外部存储/SD 卡中的文件。我的问题是,File file[] = directory.listFiles()返回 NULL,但目录中有一个文件。这是我的应用程序中的调试器视图:如您所见,我通过Intent请求(变量resource)将文件路径作为 URI 获取。当前,Test选择了 SD 卡上的文件夹。然后我想获取这个目录下的所有文件,但是函数listFiles()总是返回NULL!但是文件夹中有 1 个图像:有趣的是,此代码适用于 Android 4.4、5.0、6.0 和 7.0,但不适用于 Android 8!权限在 Manifest.xml 中设置,并在每次启动时请求/检查:注意:Android 在启动应用程序时只显示 1 个权限请求,但它不应该请求 2 个权限吗?我希望你们中有人能帮我解决这个问题。
1 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
解决方案:
尝试使用:
DocumentFile directory = DocumentFile.fromTreeUri(context, Uri.parse(resources.getUri()));
代替:
File directory = new File(resources.getPath());
另见
ContextCompat.getExternalFilesDirs解决访问错误
普遍真理:
1. Android 7.0 提供了一个简化的 API 来访问外部存储目录。
范围目录访问 在 Android 7.0 中,应用程序可以使用新的 API 来请求访问特定的 外部存储目录,包括可移动媒体(如 SD 卡)上的目录...
有关详细信息,请参阅范围目录访问培训。
2. Android O 变化。
从 Android O 开始,存储访问框架允许自定义文档提供程序 为驻留在远程数据源中的文件创建可查找的文件描述符...
权限, 在 Android O 之前,如果应用程序在运行时请求权限并且该权限被授予,系统也会错误地授予该应用程序属于同一权限组并在清单中注册的其余权限。
对于面向 Android O 的应用程序,此行为已得到纠正。该应用程序仅被授予它明确请求的权限。但是,一旦用户向应用授予权限,该权限组中的所有后续权限请求都会自动授予。
例如,
READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
...
希望能帮助到你。
添加回答
举报
0/150
提交
取消