Android 6无法通过OTG访问USB

Android 6 can't access USB with OTG

我知道有很多问题与我的问题类似,但 none 的答案能够解决我的问题。

请注意,在 Android 下面的 6 (<6) 上,一切都按预期工作,我可以在 USB 目录中创建文件。使用同一组 "codes" 它在 Android 6 中失败。问题是 File.canWrite() returns "false" 在 Android 6 中USB目录。

这里我是如何列出 "valid" folders/directories:

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() returns "false" android 6 因此使 isValidDirectory() 变为 returns "false"

我已经添加了 android.permission.WRITE_EXTERNAL_STORAGE,我找到的大部分答案都指向此权限,因为我已经声明了它,所以我不确定问题出在哪里...

提前感谢任何帮助。

在 Android 版本 >= 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;
}

您必须在 Android 6.0

中获得 运行 时间许可

看这里如何在我的早期

中获得运行时权限

看来我找到了办法。我迁移我的代码以使用 Storage Access Framework,到目前为止它正在运行。感谢您的帮助!