在过去的两周里,我一直试图找到一种在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
。