Требуется ли для android.intent.action.ACTION_OPEN_DOCUMENT_TREE setType ()? - PullRequest
0 голосов
/ 16 октября 2019

Следующий код с 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);

Теперь этот код создает исключение ActivityNotFoundException на эмуляторах Android и на имеющихся у меня физических устройствах. испытания. Я не уверен, если он генерирует 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 ]

1 голос
/ 16 октября 2019

Это взято из манифеста DocumentsUI в 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, включая */*.

Keep MIME null. Вы выбираете каталог. Каталоги не имеют значимого типа MIME.

Сообщение, на которое вы ссылались, касается OPEN_DOCUMENT, для которого действительно требуется явный тип MIME.

1 голос
/ 16 октября 2019

используйте resolveActivity до startActivity, чтобы избежать ActivityNotFoundException

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