TransWikia.com

Копирование видео файла из одной папки в другую

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/

Пробовал различные методы по копированию файлов. В основном по этой ссылке: Различные методы копирования файлов. Ничего из этого не работало. Может есть какие-то рекомендации или способы как копировать видеофайлы из одного места в другое?

Основная цель: сохранять изображения (это сделано) и сохранять видеофайлы, чтобы когда пользователь выбирал изображение/видеофайл из галереи, и в будущем удалил его из галереи, не было необходимости загружать его с сервера (но отправка и получение на сервер это уже другая история, до этого ещё не дошел).

Вообще, такое решение является правильным, или лучше как-то по-другому этот процесс организовывать?

One Answer

ОБЩЕЕ РЕШЕНИЕ, которое решило мою проблему.

Создаем 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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP