如何在 Android 11 及更高版本上使用存储访问框架打开文档文件夹?

How to open Documents folder using Storage Access Framework on Android 11 and higher?

此问题仅涉及 Android 11 岁及以上。

阅读 https://developer.android.com/guide/topics/providers/document-provider 上的 Android 存储框架,我可以让我的应用程序在我的应用程序的 public Downloads 目录中创建一个文件。

执行以下操作会为我打开 Downloads 位置,我可以保存文件。

private static final int WRITE_REQUEST_CODE = 101;

Intent i = new Intent(Intent.ACTION_CREATE_DOCUMENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_TITLE, "someFile.txt");
startActivityForResult(i, WRITE_REQUEST_CODE);

以上效果很好!但是,当我希望我的应用程序打开 Documents 文件夹而不是 Downloads 时,这种技术是否太不一样了?当系统对话框打开时,如何让我的应用程序打开 Android 11 phone 上的 Documents 文件夹并能够将文件保存在那里?

请注意,目的是在 Android 设备的文档文件夹中创建文档。

Doing the following opens the Downloads location for me

不一定。没有保证的“入口点”,您不应假设任何特定位置。

How can I make my app open Documents folder on an Android 11 phone when the system dialog opens

除非您之前从 ACTION_OPEN_DOCUMENT_TREE/ActivityResultContracts.OpenDocumentTree 获得 Documents/Uri,否则您无法做到这一点。

但是请注意,用户可以通过您的代码打开的 UI 转到 Documents/ 或他们选择的任何其他树。不幸的是,UI 对于新手来说不是很直观。