欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

关于File(path).listFiles()在android7.0及以上版本运行返回null的问题【实测有效】

程序员文章站 2022-07-03 20:26:26
关于File(path).listFiles()在android7.0及以上版本运行返回null的问题【实测有效】。 解决方案1: android6.0同一个权...

关于File(path).listFiles()在android7.0及以上版本运行返回null的问题【实测有效】。

解决方案1:

android6.0同一个权限组的任何一个权限被授权了,这个权限组的其他权限也自动被授权。但是在android7.0上并不适用

也就是以前在权限中只添加WRITE_EXTERNAL_STORAGE就默认打开了READ_EXTERNAL_STORAGE权限,但是到了android7.0及其以上的版本的时候,需要单独添加READ_EXTERNAL_STORAGE才可以读取内置存储内容。关于File(path).listFiles()在android7.0及以上版本运行返回null的问题【实测有效】

解决方案2:

这是一个神奇的办法!

1.打开build.gradle(Module:app)文件

2.修改其defaultConfig中的targetSdkVersion到22或者以下,如果你minSdkVersion就是22,建议先把minSdkVersion改为19,再把targetSdkVersion改为22,然后同步一下(Sync)

3.开始运行,你会惊喜的发现可以运行成功了

4.再把你改过的部分再改回原来的样子,依然可以正常运行不报错!

在*上面有个大神是这么解释的

The big reason for not getting your permission nowadays is because your project has a targetSdkVersion of 23 or higher

For these permissions, not only does your targetSdkVersion 23+ app need to have the element(s), but you also have to ask for those permissions at runtime from the user on Android 6.0+ devices, using methods like checkSelfPermission() and requestPermissions().

As a temporary workaround, drop your targetSdkVersion below 23.

意思就是说在android6.0以上的版本中,你除了在AndroidManifest.xml中添加权限外,还应该动态的申请权限,使用checkSelfPermission()与requestPermissions()。其中checkSelfPermission()是自己写的函数,requestPermissions()是重写的函数,具体的内容网上有很多,我这里就不赘述了。

我在解决这个问题的时候,并没有在代码中添加requestPermissions(),只是看到了其最后一句,更改了一下目标sdk版本再改了回去,代码就顺利运行了。希望我的这个经验可以帮助到你们~~~

就这个问题,各位大佬有更好的解决方案还望不吝赐教!