private fun downloadPDF( filUrl: String, filePath: String, completion: (response: String) -> Unit ) { binding.progressBar.max = 100 binding.progressBar.setProgress(0) binding.progressTextView.setText("0") val executor2: ExecutorService = Executors.newSingleThreadExecutor() val handler2 = Handler(Looper.getMainLooper()) executor2.execute { //Background work here var inputStream: InputStream? = null handler2.post { val url = URL(filUrl) val urlConnection: HttpURLConnection = url.openConnection() as HttpsURLConnection if (urlConnection.responseCode == 200) { inputStream = BufferedInputStream(urlConnection.inputStream) try { inputStream = url.openStream() val outputStream = FileOutputStream(filePath) val buffer = ByteArray(1024) //var bytesRead = inputStream.read(buffer) val fileLength: Int = urlConnection.getContentLength() var total: Long = 0 var count: Int while (inputStream!!.read(buffer).also { count = it } != -1) { total += count // publishing the progress.... if (fileLength > 0) { Log.e( TAG, "download_progress: " + (total * 100 / fileLength).toInt() ) runOnUiThread { if (!(total * 100 / fileLength).toInt().toString() .equals(binding.progressTextView.text) ) { binding.progressTextView.setText( (total * 100 / fileLength).toInt().toString() ) binding.progressBar.setProgress((total * 100 / fileLength).toInt()) } } } // only if total length is known else { Log.e( TAG, "download_progress: " + fileLength ) } outputStream.write(buffer, 0, count) } outputStream.close() inputStream!!.close() urlConnection.disconnect(); //dialogProgress.dismiss() completion("1") } catch (e: Exception) { e.printStackTrace() completion(e.printStackTrace().toString()) } } } } }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter