我要实现的目的是删除SD卡上的文件,我尝试了file.delete方法,该方法不起作用,因为SD卡现在只能读取。
因此,我读了一篇有关SAF(存储访问框架)的文章,通过存储我们在onActivityResult中获得的treeUri来获得sd卡的写访问权限。
文件删除现在可以正常工作,但是当我启动意图 Intent.ACTION_OPEN_DOCUMENT_TREE 时,有时它会返回最近的文件夹,该文件夹为空,并且在sdcard上显示文件的方法是单击溢出图标,然后选择显示SDCARD或内部存储,这可能会使某些人在运行我的应用程序时感到困惑。
我尝试将这些添加到我的意图中: intent.putExtra(“ android.content.extra.SHOW_ADVANCED”,true); intent.putExtra(“ android.content.extra.FANCY”,true); intent.putExtra(“ android.content.extra.SHOW_FILESIZE”,true);
可以在某些设备上使用,但它是专用API,在某些设备上则无法使用。
有没有办法自动打开特定目录或显示提示对话框,其中包含说明应选择哪个目录的步骤?
private void getSDCardAccess(){
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath());
startActivityForResult(intent, REQUEST_EXTERNAL_ACCESS);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_EXTERNAL_ACCESS && resultCode == RESULT_OK) {
Uri treeUri = null;
if (data != null){
treeUri = data.getData();
}
if (treeUri != null && getActivity() != null) {
getActivity().getContentResolver().takePersistableUriPermission(treeUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
StorageUtil storageUtil = new StorageUtil(getActivity());
//Takes the access so that we can use it again after the app reopens
storageUtil.storeTreeUri(treeUri.toString());
Log.d(TAG, "treeUri: " + treeUri.toString());
}else{
Log.d(TAG,"uri is empty!");
}
}
}
答案 0 :(得分:0)
有没有一种方法可以自动打开特定目录
如果您以前有一个Uri
的{{1}},则应该可以通过ACTION_OPEN_DOCUMENT_TREE
提供。根据{{3}}:
呼叫者可以通过
DocumentsContract.EXTRA_INITIAL_URI
设置文档URI,以指示文档导航器的初始位置。如果是文件夹,则系统将尽最大努力在指定文档中启动导航器;如果不是,则系统将启动包含指定文档的文件夹。
还是显示提示对话框,其中包含解释应选择哪个目录的步骤?
在调用DocumentsContract.EXTRA_INITIAL_URI
请求startActivityForResult()
之前,您需要自己做。