Android 6无法通过OTG访问USB

时间:2016-07-19 07:46:42

标签: android usb android-6.0-marshmallow

我知道有很多问题与我的问题相似,但没有一个答案可以解决我的问题。

请注意,在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,我发现的大多数答案都指向了这个权限,因为我已经宣布了这个问题,我不知道问题出在哪里......

提前感谢任何帮助。

3 个答案:

答案 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并且到目前为止它正在运行。谢谢你的帮助!