Удалить файл Android - SDK 33Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Удалить файл Android - SDK 33

Сообщение Anonymous »

Сценарий: у меня есть приложение, которое загружает CSV-файл, который после обработки я хотел бы удалить из папки Android Donwloads.
Проблема: я не могу удалить файл.< /p>
Попытка 01:

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

        val rawFilePath = inputData.getString(FILE_PATH)
val filePath = rawFilePath?.subSequence(7, rawFilePath.length).toString()

val file = File(filePath)
if (file.exists()) {
val deleted = file.delete()

logD("Deleted? $deleted")
} else {
logE("File do not exists")
}
В этом коде я получил лог «Удален? Ложь», поэтому файловая система находит файл, но не удаляет.
Попытка 02 :

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

        val downloadId = inputData.getLong(DOWNLOAD_ID, -1L)
val uri: Uri = MediaStore.Downloads.EXTERNAL_CONTENT_URI
logD("Path $uri.path")
val selection = MediaStore.Downloads._ID + "=?"
logD("selection $selection")
val selectionArgs = arrayOf(java.lang.String.valueOf(downloadId))

logD("DONWLOAD ID: $downloadId")

val deleteint = context.contentResolver.delete(uri, selection, selectionArgs)

logD("status: $deleteint")
В этом случае я получил журнал вида «статус: 0», поэтому файл также не удаляется.
Этот код загружает мой файл и зарегистрируйте трансляцию, чтобы дождаться завершения загрузки:

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

    val basePath = File(Environment.getExternalStorageDirectory(), DOWNLOAD)
if (!basePath.exists()) {
basePath.mkdirs()
}

path = basePath.absolutePath + "/" + season.code+season.period+".csv"

EasyDownloadManager.startDowload(context, path, season.dataUrl)
context.registerReceiver(downloadBroadcastReceiver, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
Это класс EasyDownloadManager

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

import android.app.DownloadManager
import android.content.Context
import android.net.Uri
import java.io.File
import java.io.InputStreamReader

object EasyDownloadManager {

fun startDowload(context: Context, downloadPath: String, url: String){

val file = File(downloadPath)
val request = DownloadManager.Request(Uri.parse(url))
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE or DownloadManager.Request.NETWORK_WIFI)
request.setDestinationUri(Uri.fromFile(file))
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)

val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
downloadManager.enqueue(request)
}

fun getFileFromId(context: Context, id: Long) : InputStreamReader {
val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
val uri: Uri = downloadManager.getUriForDownloadedFile(id)
val inputStream = context.contentResolver.openInputStream(uri)
val inputStreamReader = InputStreamReader(inputStream)

return inputStreamReader
}
}
Это мои разрешения в манифесте: Это мои конфигурации файла Gradle:

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

compileSdk 33

defaultConfig {
applicationId "com.curuto.footballdata"
minSdk 28
targetSdk 33
versionCode 1
versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
И я уверен, что у приложения есть «Разрешение на хранение», я использую Android 10

Подробнее здесь: https://stackoverflow.com/questions/758 ... oid-sdk-33
Ответить

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

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

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

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

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