我知道有很多问题与我的问题相似,但没有一个答案可以解决我的问题。
请注意,在Android 6下面(< 6),一切正常,我可以在USB目录中创建文件。使用相同的"代码"它在Android 6中失败。问题是File.canWrite()返回" false"在Android 6中用于USB目录。
这里我如何列出"有效"文件夹/目录:
File rootDir = new File(Environment.getRootDirectory().toString());
List<File> folders = new ArrayList<>();
File[] files = rootDir.listFiles();
for (File file : files) {
if (isValidDirectory(file) || file.equals(mInitialRoot)) {
folders.add(file);
}
}
这是isValidDirectory()方法:
private boolean isValidDirectory(File file) {
return file.isDirectory()
&& file.canWrite()
&& file.canRead()
&& file.exists();
}
我不知道为什么,但file.canWrite()返回&#34; false&#34;在android 6上因此使isValidDirectory()返回&#34; false&#34;
我已经添加了android.permission.WRITE_EXTERNAL_STORAGE
,我发现的大多数答案都指向了这个权限,因为我已经宣布了这个问题,我不知道问题出在哪里......
提前感谢任何帮助。
答案 0 :(得分:0)
在Android版本&gt; = 6.0中,您需要使用以下代码询问用户该权限:
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
return true;
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return false;
}
答案 1 :(得分:0)
您必须在Android 6.0中获得运行时权限
在此处查看如何获得早期answer
中的运行时权限答案 2 :(得分:0)
我似乎找到了办法。我将代码迁移到Storage Access Framework并且到目前为止它正在运行。谢谢你的帮助!