Постоянные разрешения на контент, не относящийся к SAF

63
5

В моем приложении я хотел бы сохранить постоянное разрешение на чтение контента, предоставляемого Dropbox (среди других поставщиков контента). Приложение Android Dropbox не поддерживает платформу доступа к хранилищу, поэтому для выбора содержимого я не могу использовать ACTION_OPEN_DOCUMENT - вместо этого мне нужно использовать ACTION_GET_CONTENT.

Однако кажется, что некоторые поставщики контента, такие как Диск, не возвращают устойчивые разрешения для URI, возвращаемых через ACTION_GET_CONTENT. Я считаю, что это так, как ожидалось, потому что URI GET_CONTENT не должны быть устойчивыми. К сожалению, мне нужно сохранить ссылку через перезагрузки.

По-видимому, нет способа получить постоянные разрешения для URI в последних версиях API, если поставщик контента не поддерживает SAF. Это правда? Какое хорошее обходное решение?

Плохой (для моего использования) обходные пути: копирование содержимого и его хранение в локальном режиме, опираясь на детали реализации, которые не входят в спецификацию (например, кажется, что URI Dropbox, возвращаемые GET_CONTENT, на самом деле сохраняются) или не сохраняют разрешение.

спросил(а) 2021-01-25T18:45:03+03:00 4 месяца, 4 недели назад
1
Решение
64

По-видимому, нет способа получить постоянные разрешения для URI в последних версиях API, если поставщик контента не поддерживает SAF. Это правда?

Основываясь на моих экспериментах, да. Точнее, AFAICT, только значения Uri полученные от DocumentsProvider имеют шанс получить устойчивые разрешения с точки зрения предложений. Я не вижу, как обычный ContentProvider может это предложить.

Какое хорошее обходное решение?

Учитывая ваш список "плохих" обходных путей, вашим лучшим решением является использование некоторых специфичных для Dropbox API, позволяющих пользователю выбирать контент и доступ к нему со временем, если Dropbox предлагает его.

Из "плохих" обходных решений копирование контента является вероятным выбором - настройте свой пользовательский интерфейс, чтобы сообщить пользователю, что вы "импортируете" контент, например, чтобы указать, что это действительно копия.

ответил(а) 2021-01-25T18:45:03+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема