Android Поставщик документов SAF не отображается в средстве выбора файлов - PullRequest
0 голосов
/ 28 февраля 2020

В настоящее время я тестирую Android Поставщик документов SFTP (https://github.com/RikyIsola/Android-SFTP-Documents-Provider). Он отлично работает с приложением Files системы (Android 8.1). В частности, этот файловый менеджер показывает много записей в своем меню с тремя горизонтальными полосами: «Загрузки», «Внутренний», «SD», «Drive», «SFTP» и «Termux».

В моем собственном приложении я использую стандартный метод SAF, чтобы открыть tree:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        ...
        intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, uri);
    }
    intent.addFlags(
            Intent.FLAG_GRANT_READ_URI_PERMISSION +
                    Intent.FLAG_GRANT_WRITE_URI_PERMISSION +
                    Intent.FLAG_GRANT_PREFIX_URI_PERMISSION +
                    Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
    intent.putExtra("android.content.extra.SHOW_ADVANCED", true);
    startActivityForResult(intent, REQUEST_DIRECTORY_SELECT);
}

Обратите внимание, что странные вещи "SHOW_ADVANCED" необходимы для просмотра SD-карты, по какой-то чрезвычайно странной причине. Однако, когда открывается средство выбора файлов, я вижу только Загрузки , Внутренние и SD . Больше ничего.

Стоит упомянуть: * Samba Client Android прекрасно работает с моим приложением, то есть действительно отображается в средстве выбора файлов. Но SFTP это не так.

Также стоит упомянуть: примитив ftpd (также доступный в F-Droid) также не показывает SFTP DocumentsProvider.

Нужно ли мне немного Манифест-фильтр-намерение-все, маги c? Или есть принципиальная разница между Samba DocumentsProvider и всеми остальными? Это что-то более мощное?

1 Ответ

0 голосов
/ 01 марта 2020

Важным моментом является флаг Root .FLAG_SUPPORTS_IS_CHILD , который устанавливается Поставщиком документов SMB , но не SFTP-провайдером . Смотрите также [{ ссылка }] . До сих пор непонятно, почему официальная документация разработчика Android ничего не говорит об этом отношении. Наконец, мне пришлось функционально сравнить исходный код двух провайдеров документов.

PS: флаги грантов, критикуемые blackapps , не имеют ничего общего с этой концепцией.

...