好吧,我搜索过,没有人有我的确切答案,或者我错过了。我有我的用户通过选择一个目录:Android 5.0 DocumentFile树URI
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, READ_REQUEST_CODE);
在我的活动我想捕捉的实际路径,这似乎是不可能的。
protected void onActivityResult(int requestCode, int resultCode, Intent intent){
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == RESULT_OK) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M){
//Marshmallow
} else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
//Set directory as default in preferences
Uri treeUri = intent.getData();
//grant write permissions
getContentResolver().takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
//File myFile = new File(uri.getPath());
DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
我选择的文件夹为:
Device storage/test/
我已经尝试了所有的以下方式来得到一个确切的路径名,但无济于事。
File myFile = new File (uri.getPath());
//returns: /tree/1AF6-3708:test
treeUri.getPath();
//returns: /tree/1AF6-3708:test/
pickedDir.getName()
//returns: test
pickedDir.getParentFile()
//returns: null
基本上我需要把/tree/1AF6-3708:
为/storage/emulated/0/
或者其他每个设备调用它的存储位置。所有其他可用选项也会返回/tree/1AF6-37u08:
。
有2个理由我想这样做。
1)在我的应用程序中,我将文件位置存储为共享首选项,因为它是用户特定的。我有相当多的数据将被下载和存储,我希望用户能够将它放在他们想要的地方,特别是如果他们有额外的存储位置。我做的设置默认,但我想要的多功能性,而不是专用的位置:
Device storage/Android/data/com.app.name/
2)在5.0我想使用户能够获得读/写权限到该文件夹,这似乎是唯一的出路要做到这一点。如果我可以从字符串获得读/写权限来解决这个问题。
我一直能找到的所有解决方案都与Mediastore有关,这对我无能为力。我必须在某处丢失某些东西,否则我必须瞥见它。任何帮助,将不胜感激。谢谢。
您是否得到了它的工作? –