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

时间:2018-09-12 06:29:57

标签: java android file android-sdcard android-external-storage

我正在为 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个权限吗?

我希望你们中的某人可以帮助我解决问题。

最好的问候, 迈克尔

1 个答案:

答案 0 :(得分: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,   Storage Access Framework允许custom documents providers   为驻留在远程文件中的文件创建可搜索的文件描述符   数据源...

     

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

     

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

     

例如READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE ...

希望有帮助。