猿问

无法写入具有权限的 SD 卡

我一直在努力在 SD 卡上写字,我终于意识到这项工作有一种新的“权限”。首先,这是我使用的代码,希望得到许可,以后不需要它:


Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);

startActivityForResult(intent, RCODE);


@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RCODE && resultCode == Activity.RESULT_OK){

        Uri treeUri = data.getData();

        DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);

        grantUriPermission(getPackageName(), treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

        getContentResolver().takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

        App.editor.putBoolean("writable",true).apply();App.editor.commit();

    }

}

这是我用来删除文件的代码:


public static boolean deleteFile(Context context, File f){

    if (isOnInternal(f)){

        return f.delete();

    }else{

        String path = "/document/";

        String tp = f.getAbsolutePath().replace(getsdpath(),"").substring(1);

        path += getsdpath().replace("/storage/","")+":"+tp;

        Uri uri = new Uri.Builder()

                .scheme("content")

                .authority("com.android.externalstorage.documents")

                .path(path)

                .build();

        Log.e("path1",uri.getPath());

        return DocumentFile.fromSingleUri(context,uri).delete();

    }

}

这是我想删除文件时的 LogCat 消息:


W/Documents: Failed to delete document

java.lang.SecurityException: Permission Denial: writing com.android.externalstorage.ExternalStorageProvider uri content://com.android.externalstorage.documents/document/1CE2-0E0E%3Aimg.jpg from pid=3000, uid=10060 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()


以下是以下方法采用的两条路径:


uri.getPath();

the tree which I grant the permission from: /tree/1CE2-0E0E:

the file : /document/1CE2-0E0E:img.jpg

我用来删除文件的代码是尝试在用户选择文件时复制由 android itslef 创建的原始 URI,但它似乎没有按计划工作。


我很感激任何帮助!


MM们
浏览 234回答 2
2回答

汪汪一只猫

我从以下位置授予权限的树:/tree/1CE2-0E0E:文件:/document/1CE2-0E0E:img.jpgURI 的根不同。检查这两个 URI,因为它们看起来不一样。我怀疑是这个问题。您应该以某种方式重新使用您发送的 URI grantUriPermission()

大话西游666

MANAGE_DOCUMENTS在清单中或通过代码添加到您的权限。您的其他权限似乎并未涵盖此特定权限。
随时随地看视频慕课网APP

相关分类

Java
我要回答