Stack Overflow на русском Asked by izl0m on December 18, 2020
Пытаюсь реализовать чат. Дошел до того момента, где пользователь выбирает из хранилища нужный видеофайл с помощью intent. Далее, получаю Uri этого файла. Из этого Uri получаю путь к файлу.
Пример, получаемого пути, где хранится необходимый видеофайл:
/storage/emulated/0/DCIM/ScreenRecorder/Screenrecorder-2020-08-25-20-54-43-638.mp4
Путь, куда необходимо сохранить этот видеофайл:
/storage/emulated/0/Android/data/com.experimental.chat/files/Video/
Пробовал различные методы по копированию файлов. В основном по этой ссылке: Различные методы копирования файлов. Ничего из этого не работало. Может есть какие-то рекомендации или способы как копировать видеофайлы из одного места в другое?
Основная цель: сохранять изображения (это сделано) и сохранять видеофайлы, чтобы когда пользователь выбирал изображение/видеофайл из галереи, и в будущем удалил его из галереи, не было необходимости загружать его с сервера (но отправка и получение на сервер это уже другая история, до этого ещё не дошел).
Вообще, такое решение является правильным, или лучше как-то по-другому этот процесс организовывать?
ОБЩЕЕ РЕШЕНИЕ, которое решило мою проблему.
Создаем Intent, чтобы получить Uri на необходимый видеофайл.
private fun getFileFromSystem(type: String, request: Int) {
val videoPickerIntent = Intent(Intent.ACTION_GET_CONTENT)
videoPickerIntent.type = type
startActivityForResult(videoPickerIntent, request)
}
Далее, в методе onActivityResult получаем результат, и можем выполнять сохранение файла
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (data != null) {
when (requestCode) {
...
VIDEO_REQUEST -> {
val selectVideo = data.data!!
try {
//Название директории, в которой будут храниться видеофайлы
val FOLDER_VIDEO = "/Video/"
//Путь к каталогу приложения на внешнем хранилище
val pathToVideo = File(getPathApplication(), FOLDER_VIDEO)
//Проверяем, имеется ли этот каталог. В случае чего, создаем его
if (!pathToVideo.exists()) {
pathToVideo.mkdir()
}
//Путь, куда необходимо сохранить видеофайл
val resultPath = File(getPathApplication()!!.path, FOLDER_VIDEO)
//выполняем копирование файла из одной папки в другую
requireContext().contentResolver.openInputStream(selectVideo)!!.copyTo(
FileOutputStream(
File(
resultPath,
"video_${System.currentTimeMillis()}.mp4"
)
)
)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
}
}
Путь к папке проекта
private fun getPathApplication(): File? = requireContext().getExternalFilesDir(null)
Answered by izl0m on December 18, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP