无法在我的应用中使用Storage Access Framework

时间:2017-11-07 16:31:38

标签: android storage-access-framework

我几年前创建了一个应用程序,它拥有自己的文件浏览器,并对所选文件执行了很多处理。最近我想增加写入外部存储器的能力,如通过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

谁能告诉我在这里缺少什么? 提前谢谢。

0 个答案:

没有答案