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()要求的当前状态吗?
答案 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类型。