即使授予uri权限也无法写入SD卡

时间:2018-08-21 22:10:32

标签: java android android-sdcard sd-card

在过去的两周里,我一直试图找到一种在SD卡上写入数据的方法,今天终于我明白了我应该做的事情,并且我做到了。 它确实有效,我可以删除文件;但是完全相同的代码不再起作用。

这是我的代码:

 //granting permission
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQ_CODE);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQ_CODE && 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.putString("uri",treeUri.toString()).apply();
    }
}
//MY DELETE VOID
public static boolean deleteFile(Context context, File f){
    if (isOnInternal(f)){
        return f.delete();
    }else{
        String tp = f.getAbsolutePath().replace(getsdpath(),"").substring(1);
        Uri uri = Uri.parse(App.preferences.getString("uri","null"));
        DocumentFile pickedDir = DocumentFile.fromTreeUri(context, uri);
        context.grantUriPermission(context.getPackageName(), uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        context.getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        uri = uri.buildUpon().appendPath(tp).build();
        uri = uri.buildUpon().path(uri.getPath().replace("tree","document")).build();
        uri = uri.buildUpon().path(uri.getPath().replace(":/",":")).build();
        Log.e("PPP",uri.toString());
        return DocumentFile.fromSingleUri(context,uri).delete();
    }
}

我很清楚,我在这里没有使用常规方式,但是这种方法有效,并且我非常希望保持这种方式。

如果有任何人可以提供帮助,我将很乐意提供更多信息。

更新  经过一些测试,我发现当我想检查我的Uri所引用的文件是否确实存在时,使用file.exists(),它返回false

0 个答案:

没有答案