Android: лучший способ найти файл во внешнем хранилище 2020

#android #kotlin #android-file

#Android #kotlin #android-файл

Вопрос:

Я пытаюсь найти конкретный файл, который я уже загрузил через Downloadmanager . Я знаю, что эти файлы хранятся в. Enviroment.DIRECTORY_DOWNLOADS Но чего я не знаю, так это как получить этот конкретный файл по следующим причинам:

  1. Как мне убедиться, что мой файл находится самым быстрым и безопасным способом,
  2. Как мне найти свой файл, если у него две версии (например MyFile , и MyFile1 ),
  3. Как убедиться, что это работает с API 21 до API 30?,
  4. Возвращает значение null, если файл не найден,
  5. Должен ли я запрашивать разрешения на поиск моего файла (должен ли я вообще)?

Это мой текущий подход:

Мой менеджер загрузки (успешно сохраняет файлы в каталоге загрузки)

 private fun initDownload(uri: Uri, fileName: String) {
    val downloadManager = context.getSystemService(DOWNLOAD_SERVICE) as DownloadManager

    val request = DownloadManager.Request(uri)
        .setTitle(fileName)
        .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
        .setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS,
            "$fileName.pdf")

    downloadManager.enqueue(request)
}
  

Найти файл (еще не тестировал)

 class FileValidator @Inject constructor(@ApplicationContext val context: Context) {
    fun getFileOrNull(fileName: String): File? {
        // Have to create a generic regex to find every possible file that matches my fileName, don't know how
        val regex = fileName

        val downloadFolder = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
        val fileList = downloadFolder?.listFiles()

        if (fileList != null) {
            for (file in fileList) {
                return if(file.name == regex) {
                    file
                } else {
                    null
                }
            }
        }
        return null
    }
}
  

Я ценю любую помощь, спасибо

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

1. I know that this file(s) are stored in Enviroment.DIRECTORY_DOWNLOADS Нет. Файл будет находиться в каталоге загрузок. Таких каталогов может быть много. Ваш файл находится в getExternalFilesDir(среда. DIRECTORY_DOWNLOADS). Разрешения не требуются. Работает во всех версиях.

2. И вы пытаетесь мне это сказать?

3. Извините, я вас не понимаю.

4. Что вы пытаетесь сказать мне своим комментарием? Я имею в виду, хорошо, я знаю, где хранятся мои файлы, я уже говорил об этом в своем вопросе? Итак, что вы пытаетесь мне сказать?

5. if (new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), fileName).exists())