我认为这很容易但事实证明不幸的是.
是)我有的:
我的外部存储器上有一个名为"myFolder"的文件夹(不是SD卡,因为它是Nexus 4,但这应该不是问题).该文件夹包含一些*.csv文件.
我想要的是:
我想写一个方法,它执行以下操作:显示各种应用程序(文件浏览器),我可以从中选择一个(见图片).单击它后,所选的文件浏览器应该启动并显示"myFolder"的内容.不多也不少.

我的问题:
我到底该怎么做?我想我接下来的代码非常接近,但无论我做什么 - 而且我确定必须有一些我还没有做到的事情 - 它始终只打开来自外部存储器的主文件夹.
public void openFolder()
{
File file = new File(Environment.getExternalStorageDirectory(),
"myFolder");
Log.d("path", file.toString());
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setDataAndType(Uri.fromFile(file), "*/*");
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud) Android API 21 引入了名为 SAF(存储访问框架)的新框架,用于接收对存储的访问。在 API 30 之后,这是您的应用程序访问外部存储的唯一可能的解决方案。
当使用 ACTION_OPEN_DOCUMENT_TREE 意图时,我在该框架中遇到了 2 个错误(?)。
有人有同样的问题吗?
我的代码:
public void openDirectory() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, "content://com.android.externalstorage.documents/tree/2C13-1335%3AMusic");
startActivityForResult(intent, FOLDER_ACCESS_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FOLDER_ACCESS_REQUEST_CODE && resultCode == RESULT_OK) {
if (data != null) {
Uri uri = data.getData(); // there i receive uri of selected folder, it is "content://com.android.externalstorage.documents/tree/2C13-1335%3AMusic"
getContentResolver().takePersistableUriPermission(uri,
Intent.FLAG_GRANT_READ_URI_PERMISSION | …Run Code Online (Sandbox Code Playgroud) 尽管这是一个简单的问题,但我无法在google或stackoverflow上找到答案。
当我使用以下代码时,我得到这个结果//com.android.externalstorage.documents/tree/primary:Podcasts
var intent = new Intent(Intent.ActionOpenDocumentTree);
intent.PutExtra("android.content.extra.SHOW_ADVANCED", true);
intent.PutExtra("android.content.extra.FANCY", true);
intent.PutExtra("android.content.extra.SHOW_FILESIZE", true);
Run Code Online (Sandbox Code Playgroud)
你能帮我理解我的结果的各个部分吗?