Загрузка файла и сохранение его в папке загрузки с помощью kotlin в Android

Я пытаюсь загрузить файл apk с веб-сервера и сохранить его в папке загрузки. Я использую библиотеку Feul

Fuel.download("https://mypath/app.apk").destination { 
    response, url -> val dir = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()) File(dir, "abcd.apk")    
}.progress {
    readBytes, totalBytes -> val progress = readBytes.toFloat() / totalBytes.toFloat()
    Log.d("log",progress.toString())
}.response {
    req, res, result -> Log.d("log","download completed ")    
    Log.d("log",Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + "/abcd.apk")
}

я получаю bytesArray в response но файл не сохраняется в папку загрузки. я имею write_external_storage на моем Manifest файл. Пожалуйста, дайте мне знать, что мне не хватает?

2 ответа

Решение

Как вы упомянули в комментарии, что вы используете targetSdkVersion как 23. Начиная с Android 6.0 (уровень API 23), если вы установите targetSdkVersion как 23 в вашем приложении вы должны реализовать разрешение Rumtime в вашем приложении.

Для его реализации обратитесь к официальной документации здесь. Запрос разрешений во время выполнения.

      fun storeImage(link: String) : String {
    val policy: StrictMode.ThreadPolicy = StrictMode.ThreadPolicy.Builder().permitAll().build()
    StrictMode.setThreadPolicy(policy)
    val cw = ContextWrapper(applicationContext)
    val directory: File = cw.getDir("imageDir", Context.MODE_PRIVATE)
    val pictureFile = File(directory, "backgroundImage.gif")
    URL(link).openStream().use { input ->
        FileOutputStream(pictureFile).use { output ->
            input.copyTo(output)
            Log.e("DD GIF", "storeImage: FILE SAVED" )
            return "SAVED"
        }
    }
}

это работает для меня.

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