Как удалить временный файл в папке загрузки на Android 10

#android #saf

#Android #saf

Вопрос:

Это просто сделать в любой системе, кроме Android, но у меня есть и приложение, которому необходимо создать файл csv в ОБЩЕЙ ВНЕШНЕЙ папке загрузки. Выключите / перезапустите телефон / приложение, и файл сохранится. Затем мне нужно удалить файл (постоянный URI где-нибудь?), Прежде чем я воссоздам его с новыми данными. (если существует () удалить)

Я вижу все виды документов, указывающих на SAF для этого процесса, но нигде не могу найти примеров того, как выполнить этот простой процесс создания / удаления. Если это можно сделать на API 28 и это работает на 29 , это было бы здорово.

Без SAF я сделал это:

 fun writeCSV() {
    val CSV_HEADER = "Last,Firstn"
    val mockData = "Tester,Joen"
    val contentValues = ContentValues()
    
    contentValues.put(MediaStore.Downloads.DISPLAY_NAME, "aTest.csv")
    contentValues.put(MediaStore.Downloads.MIME_TYPE, "text/csv")
    contentValues.put(MediaStore.Downloads.IS_PENDING, true)
    val uri = MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
    val fileUri = contentResolver.insert(uri, contentValues)
    if (fileUri != null) {
        try {
            val outputStream = contentResolver.openOutputStream(fileUri)
            outputStream!!.write(CSV_HEADER.toByteArray())
            outputStream!!.write(mockData.toByteArray())
            outputStream!!.close()
            contentValues.put(MediaStore.Images.Media.IS_PENDING, false)
            contentResolver.update(fileUri, contentValues, null, null)
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }
}
 

Проблема в том, что когда fun вызывается снова, мне нужно удалить этот файл и воссоздать его с новыми данными, потому что Android создает «ATest (1).csv» вместо перезаписи.

Комментарии:

1. «Я вижу все виды документов, указывающих на SAF для этого процесса» — платформа доступа к хранилищу предназначена для того, чтобы пользователь мог контролировать, куда на устройстве пользователя (или в облачном хранилище пользователя) пользователь хочет, чтобы ваше приложение помещало данные пользователя. Похоже, это не то, что вы хотите. Вы можете попробовать MediaStore.Downloads , что может подойти для вашего сценария.

2. Интересно, что вы могли бы его создать. Если вы можете создать файл, вы также можете его удалить.

3. Как? Повторяю: если вы можете создать файл, вы можете его удалить.

4. @blackapps Как я могу удалить созданный файл? Это мой первоначальный вопрос. Сказать, что я могу (после сбоя / перезагрузки), бесполезно. Пожалуйста, покажите, как получить uri существующего файла в известном месте с известным именем.

5. How can I delete a file that has been created? Неправильный вопрос. Предполагалось, что вы (ваше приложение) создали файл для начала. Перечитайте мои комментарии. И если ваше приложение создало файл, начните показывать свой код.