我几年前创建了一个应用程序,它拥有自己的文件浏览器,并对所选文件执行了很多处理。最近我想增加写入外部存储器的能力,如通过OTG连接的SD卡和硬盘驱动器。 问题是我不能基于DocumentFile结构重写整个项目,因为它是一个非常大的项目,我需要永远更新。所以我需要以某种方式将旧的File方法转换成几行并完成它。这是我到目前为止添加的内容:
private void getPersistentPermission() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.putExtra("android.content.extra.SHOW_ADVANCED", true);
startActivityForResult(intent, reqcode_storage);
}
和:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == reqcode_storage) {
Uri uri = data.getData();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
final int perm_flag = Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
grantUriPermission(getPackageName(), uri, perm_flag);
getContentResolver().takePersistableUriPermission(uri, perm_flag);
}
}
} else {
Log.d(tag, "something`s wrong !");
}
}
然后我尝试做这样的事情:
try {
DocumentFile dfile = DocumentFile.fromFile(file);
OutputStream os = getContentResolver().openOutputStream(dfile.getUri());
os.write(some_string.getBytes());
} catch (Exception e) {
Log.e(tag, e.toString());
} finally {
try {
os.close();
} catch (Exception ignored) {}
}
我在我的应用程序中使用实现的文件浏览器获取“文件”。它适用于内部存储。 我阅读了很多关于SAF的线索,但不知怎的,我无法让它工作。它总是显示这个错误:
java.io.FileNotFoundException: Permission denied
谁能告诉我在这里缺少什么? 提前谢谢。