android.intent.action.ACTION_OPEN_DOCUMENT_TREE 还需要 setType() 吗?

Does android.intent.action.ACTION_OPEN_DOCUMENT_TREE still require setType()?

this post 解释的以下带有 setType() 的代码在最近之前工作正常?

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.setType("*/*");
intent.setFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
startActivityForResult(intent, REQUEST_CODE_OPEN_DIRECTORY);

现在,此代码在我测试过的 Android 个模拟器和物理设备上抛出 ActivityNotFoundException。我不确定它是否会在所有设备上抛出 ActivityNotFoundException。不幸的是,我不知道开发环境的哪个变化导致了这个。如果去掉setType(),它在所有测试过的模拟器和物理设备上都能正常工作。

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.setFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
startActivityForResult(intent, REQUEST_CODE_OPEN_DIRECTORY);

谁能阐明 setType() 要求的当前状态?

startActivity之前使用resolveActivity以避免ActivityNotFoundException

if (intent.resolveActivity(getPackageManager()) = null) {
    startActivityForResult(intent, REQUEST_CODE_OPEN_DIRECTORY);
}

这取自DocumentsUI manifest in Android 10:

<intent-filter>
    <action android:name="android.intent.action.OPEN_DOCUMENT" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.OPENABLE" />
    <data android:mimeType="*/*" />
</intent-filter>

<intent-filter>
    <action android:name="android.intent.action.OPEN_DOCUMENT_TREE" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

目录选择器的意图过滤器没有定义任何 MIME 类型。这意味着对于 activity 打开您的意图不能有任何明确的 MIME 类型,包括 */*.

保留 MIME 类型 null。您正在选择一个目录。目录没有有意义的 MIME 类型。

您提到的 post 是关于 OPEN_DOCUMENT 的,它确实需要明确的 MIME 类型。