Я пытаюсь удалить аудиофайлы с помощью Contentresolver, и он работает на API 29 (память телефона и SD-карта тоже)
Сначала я проверяю разрешения в context.contentResolver.persistedUriPermissions (если SD карта), и если оно ложное, я начинаю намерение:
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
startActivityForResult(intent,1)
Попросить пользователя дать разрешение:
if (requestCode == 1 && resultCode == Activity.RESULT_OK) {
val sdcdardRootUri = data!!.data
context!!.grantUriPermission(context!!.packageName, sdcdardRootUri,Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
val takeFlags =data.flags and (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
context!!.contentResolver.takePersistableUriPermission(sdcdardRootUri!!, takeFlags)
}
Проверьте еще раз разрешения, чтобы увидеть, что пользователь выбрал SD-карту. Если все в порядке, начните удаление:
context.contentResolver.delete((currentSong.songUri).toUri(), null, null)
currentSong является элементом класса данных Song и его значением songUri, например: content: // media / external / audio / media / 103
Удалено строк = 1, все в порядке, оно удалено из базы данных мультимедиа и файл тоже удален ... по API 29.
Но по API 25, например, результаты те же, разрешения в порядке, удаленная строка = 1. Удаляет из базы данных мультимедиа (я не могу читать снова с моим приложением), но файл все еще там. Почему?
Он также не работает с памятью телефона, однако разрешения там не требуется. Я много читал о SAF и файловых провайдерах, и я создал файловый провайдер по умолчанию в манифесте, но ничего не изменится, если я его удалю. Не очень понятно, нужно ли мне это в этом случае или нет. (Если я правильно знаю, это подкласс contentProvider)
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
provider_path. xml:
<paths>
<external-path
name="external"
path="." />
Большое спасибо за помощь