Android Storage Access Framework – удаление возможно без доступа на записьAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android Storage Access Framework – удаление возможно без доступа на запись

Сообщение Anonymous »

В настоящее время я реализую приложение для Android с помощью Kotlin и столкнулся с некоторыми проблемами с «новой» платформой доступа к хранилищу (SAF). В моем приложении пользователь может выбрать две папки, назовем их исходной и целевой. Приложение должно иметь доступ только для чтения к источнику, но доступ для чтения/записи к цели. Я бы предпочел, чтобы это было предусмотрено системой, чтобы приложение не удаляло ненужные файлы.
Но проблема в том, что приложение может удалять файлы в обеих папках, и я не понимаю, почему. Разрешения были правильно сохранены следующим образом:

Код: Выделить всё

//
if (folderType == "source") {
requireContext().contentResolver.takePersistableUriPermission(
it,
Intent.FLAG_GRANT_READ_URI_PERMISSION
)
} else if (folderType == "target") {
requireContext().contentResolver.takePersistableUriPermission(
it,
Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
)
}
и я это еще раз проверил:

Код: Выделить всё

requireContext().contentResolver.persistedUriPermissions.forEach { perm ->
Log.i(TAG, "URI: ${perm.uri} | Read: ${perm.isReadPermission} | Write: ${perm.isWritePermission}")
}
который печатает:

Код: Выделить всё

I  URI: content://com.android.externalstorage.documents/tree/primary%3ATest%2FTarget | Read: true | Write: true
I  URI: content://com.android.externalstorage.documents/tree/primary%3ATest%2FSource | Read: true | Write: false
Я удаляю файлы с помощью

Код: Выделить всё

val deleted = DocumentsContract.deleteDocument(resolver, fileUri)
Я пытался выяснить это на различных страницах документации и с помощью ChatGPT, но безуспешно. В настоящее время я предполагаю, что это просто так, но я не совсем понимаю, почему и для чего нужны эти разрешения, если они не используются системой для обеспечения доступа к хранилищу.
Я был бы признателен за любую помощь в этом вопросе. Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/799 ... ite-access
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»