我一直在努力在 SD 卡上写字,我终于意识到这项工作有一种新的“权限”。首先,这是我使用的代码,希望得到许可,以后不需要它:Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);startActivityForResult(intent, RCODE);@Overrideprotected 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 documentjava.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,但它似乎没有按计划工作。我很感激任何帮助!
添加回答
举报
0/150
提交
取消