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

时间:2019-10-16 18:42:29

标签: android android-intent storage-access-framework

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()要求的当前状态吗?

2 个答案:

答案 0 :(得分:1)

resolveActivity之前使用startActivity来避免ActivityNotFoundException

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

答案 1 :(得分:1)

这取自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类型。这意味着要打开活动,您的意图不能有任何明确的mime类型,包括*/*

保持哑剧类型null。您正在选择目录。目录没有有意义的mime类型。

您所指的帖子是关于OPEN_DOCUMENT的,它确实需要显式的mime类型。

相关问题