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,到目前为止它正在运行。感谢您的帮助!
我知道有很多问题与我的问题类似,但 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,到目前为止它正在运行。感谢您的帮助!