Как получить файл из URI FileProvider?

Я хочу записать видео, сохранить его во внутренней памяти и получить доступ к файлу.

FileProvider создает URI для камеры, собирающейся записать видео:

File path = new File(this.getFilesDir(), "shared");
File file = new File(path, UUID.randomUUID().toString() + ".mp4");

// Store URI as property of activity
this.uri = FileProvider.getUriForFile(App.getInstance().getApplicationContext(), App.getInstance().getApplicationContext().getPackageName() + ".provider", file);

Intent videoCaptureIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
videoCaptureIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, durationLimit);
videoCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(videoCaptureIntent, REQUEST_VIDEO_CAPTURE);

Видеофайл хранится во внутреннем хранилище приложения, я вижу файл в проводнике Android в правильном месте.

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

if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_VIDEO_CAPTURE) {

    File file = new File(this.uri.getPath());
    Log.d(file.exists()); // Logs false
}

Это почему?

this.uri.getPath() не возвращает то, что вы думаете. Путь URI, в широком смысле, - это часть сегментов, следующих за полномочиями (и необязательным портом). Это не путь к файлу. Почему бы просто не повесить File file?
Mike M. 18.10.2018 18:08

В настоящее время приложение настроено для передачи URI. Есть ли способ получить File по URI?

Manuel 18.10.2018 18:13

кстати, для чего вам нужен объект File? просто для чтения входного потока?

pskink 18.10.2018 20:04

@pskink Файл должен быть загружен на сервер. Метод загрузки принимает в качестве параметра File. Ваш намек мне не помог, я все еще ищу :)

Manuel 18.10.2018 20:05

используя оххтп? если да, используйте кастомный RequestBody

pskink 18.10.2018 20:08

@pskink Нет, с помощью Parse Android SDK.

Manuel 18.10.2018 20:08

поэтому вы не можете этого сделать, поскольку невозможно получить объект File из данного Uri

pskink 18.10.2018 20:15

Я нашел несколько хитрых способов с недоработками в зависимости от контент-провайдера. Похоже, что лучший способ - передавать объекты File вместо URI, что я и сделаю вместо этого.

Manuel 18.10.2018 20:19

да, в таком случае это был бы лучший вариант

pskink 18.10.2018 20:24
3
9
1 854
0

Другие вопросы по теме