#android #kotlin #android-file
#Android #kotlin #android-файл
Вопрос:
Я пытаюсь найти конкретный файл, который я уже загрузил через Downloadmanager
. Я знаю, что эти файлы хранятся в. Enviroment.DIRECTORY_DOWNLOADS
Но чего я не знаю, так это как получить этот конкретный файл по следующим причинам:
- Как мне убедиться, что мой файл находится самым быстрым и безопасным способом,
- Как мне найти свой файл, если у него две версии (например
MyFile
, иMyFile1
), - Как убедиться, что это работает с API 21 до API 30?,
- Возвращает значение null, если файл не найден,
- Должен ли я запрашивать разрешения на поиск моего файла (должен ли я вообще)?
Это мой текущий подход:
Мой менеджер загрузки (успешно сохраняет файлы в каталоге загрузки)
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())