Не удается удалить аудиофайл с помощью contentResolver.delete ниже API 29 - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь удалить аудиофайлы с помощью 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="." />

Большое спасибо за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...