java / android - 无法访问SD卡上的文件

问题描述 投票:1回答:1

我正在为Android 8.0开发Android应用程序,我需要打开/读取和删除外部存储/ SD卡中的文件。

我的问题是,File file[] = directory.listFiles()返回NULL,但目录中有一个文件。

这是我的应用程序的调试器视图:

Debugging App

如您所见,我通过Intent请求(变量resource)将文件路径作为URI。目前,选择SD卡上的文件夹Test

然后我想获取此目录中的所有文件,但函数listFiles()返回始终为NULL!但文件夹中有1个图像:

Actual content of the folder

有趣的是,此代码适用于Android 4.4,5.0,6.0和7.0,但不适用于Android 8!

权限在Manifest.xml中设置,并在每次启动时被请求/检查:

Requested Permissions

注意:Android在启动应用时只显示1个权限请求,但它不应该请求2个权限吗?

我希望有人帮我解决问题。

最好的问候,迈克尔

java android file android-sdcard android-external-storage
1个回答
1
投票

解:

尝试使用:

DocumentFile directory = DocumentFile.fromTreeUri(context, Uri.parse(resources.getUri()));

代替:

File directory = new File(resources.getPath());

另见

ContextCompat.getExternalFilesDirs解决了the access error

普遍真理:

1. Android 7.0提供了一个简化的API来访问外部存储目录。

Scoped Directory Access在Android 7.0中,应用程序可以使用新的API来请求访问特定的external storage目录,包括可移动媒体上的目录,如SD卡......

有关更多信息,请参阅Scoped Directory Access training


2. Android O更改。

Starting in Android O,存储访问框架允许custom documents providers为驻留在远程数据源中的文件创建可搜索的文件描述符...

Permissions,在Android O之前,如果应用程序在运行时请求了权限并且授予了权限,系统也会错误地授予应用程序其他属于同一权限组的权限,并且已在清单中注册。

对于定位Android O的应用,此行为已得到纠正。该应用程序仅被授予其明确请求的权限。但是,一旦用户向应用程序授予权限,则会自动授予该权限组中所有后续权限请求。

例如,READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE ......

希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.