как проверить, существует ли файл или нет, используя URI контента - PullRequest
2 голосов
/ 13 июля 2020

У меня есть uri содержимого аудиофайла, который я получил из намерения выбора.

content://com.mi.android.globalFileexplorer.myprovider/external_files/KannadaGeeta/11CHAPTER10.mp3

Я только что сохранил указанный выше uri в базе данных.

Теперь, когда пользователь открывает снова мое приложение. Мне нужно сообщить ему, существует ли последний выбранный им mp3-файл или нет. Если существует, то только я должен позволить ему продолжить, иначе мне нужно сообщить, чтобы загрузить файл снова.

но я застрял здесь полностью, я не понимаю, как проверить, существует ли файл или нет с его содержимым uri .

Пожалуйста, помогите решить мою проблему.

Ответы [ 2 ]

2 голосов
/ 14 июля 2020

Метод 1: - Хорошо, так как Android команда решила отказаться от getExternalStorageDirectory по соображениям безопасности. Многие вещи ими не решены должным образом.

на ваш вопрос я не нашел правильного ответа. Как бы то ни было, вот обходной путь с использованием устаревшего метода.

        var uri = Uri.parse("content://com.mi.android.globalFileexplorer.myprovider/external_files/KannadaGeeta/11CHAPTER10.mp3")
        var vidPath = uri.path
        vidPath = vidPath?.replace("external_files",Environment.getExternalStorageDirectory().toString())
        val file = File(vidPath)

        if (file.exists()) {
            println("log yes $file")
        } else {
            println("log no $file")
        }

Это будет работать нормально, но использование этого метода остается на ваше усмотрение из-за устаревшего метода.

Метод 2: - еще один способ - использовать ACTION_OPEN_DOCUMENT, затем в onActivityResult вы должны добавить

val contentResolver = applicationContext.contentResolver
val takeFlags: Int = Intent.FLAG_GRANT_READ_URI_PERMISSION or       
                     Intent.FLAG_GRANT_WRITE_URI_PERMISSION
contentResolver.takePersistableUriPermission(selectedVideoUri!!, takeFlags)

Затем, наконец, с content uri, срок действия которого не истек, вы можете проверить наличие файла.

DocumentFile.fromSingleUri(Uri.parse(contentUriStringfromdatabase)).exists()
0 голосов
/ 13 июля 2020
 File file = new File(URI.create("your uri").getPath());
 if (file.exists()) {
  //Do something`enter code here`
 }

Также необходимо разрешение:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...