Kotlin - Как скачать файл .mp3 и сохранить его во внутреннем хранилище - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь загрузить файл .mp3 с URL-адреса и сохранить его во внутреннем хранилище.Я смог загрузить данные и сохранить их, но аудиофайл не звучит правильно.Это не похоже на оригинал.

Я могу выбрать View -> Tool Windows -> Device File Explorer, затем открыть data/data/[myPackageName]/files и сохранить файл audio.mp3, затем воспроизвести его, но время не правильное, байтразмер неправильный, и звук не такой, как должен звучать

Вот мой класс AsyncTask:

    class DownloadAudioFromUrl(val context: Context): AsyncTask<String, String, String>() {

        override fun doInBackground(vararg p0: String?): String {
            val url  = URL(p0[0])
            val connection = url.openConnection()
            connection.connect()
            val inputStream = BufferedInputStream(url.openStream())
            val filename = "audio.mp3"
            val outputStream = context.openFileOutput(filename, Context.MODE_PRIVATE)
            val data = ByteArray(1024)
            var total:Long = 0
            var count = 0
            while (inputStream.read(data) != -1) {
                count = inputStream.read(data)
                total += count
                outputStream.write(data, 0, count)
            }
            outputStream.flush()
            outputStream.close()
            inputStream.close()
            println("finished saving audio.mp3 to internal storage")
            return "Success"
        }

    }

Затем в своей деятельности onCreate() Я выполняю задачу

        val urlString = "https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_5MG.mp3"
        DownloadAudioFromUrl(this).execute(urlString)

.

1 Ответ

0 голосов
/ 28 сентября 2019

Похоже, ваш метод записи находится в неправильном порядке, и вы делаете два чтения за цикл, но захватываете только одно из них

Попробуйте это

var count = inputStream.read(data) 
var total = count 
while (count != -1) {
    outputStream.write(data, 0, count)
    count = inputStream.read(data)
    total += count
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...