webview를 통해서 이것저것 개발을 진행하고 있는데 이번에는 파일을 다운로드 받는 것을 구현해보려고 한다 ❗
방법은 webview에 있는 DownloadListener 를 사용하는 것이다. 앱 개발은 이런게 참 좋구나 😊 (그래서 더 바보가 돼가고 있는 건지도..)
너무 간단해서 설명할 것도 없다..
webView.setDownloadListener(DownloadListener { url, userAgent, contentDisposition, mimetype, contentLength ->
val request = DownloadManager.Request(Uri.parse(url))
val filename = URLUtil.guessFileName(url, contentDisposition, mimetype)
val cookies = CookieManager.getInstance().getCookie(url)
request.addRequestHeader("cookie", cookies)
request.addRequestHeader("User-Agent", userAgent)
request.setDescription("Downloading file..")
request.setTitle(filename)
request.allowScanningByMediaScanner()
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename)
val dManager = mContext.getSystemService(DOWNLOAD_SERVICE) as DownloadManager
dManager.enqueue(request)
})
추가로 파일 다운로드를 하기 위해서는 외부 저장소 쓰기 권한을 주어야 하고, 해당 앱에서 무조건 파일을 다운로드 받고 싶다면 파일 다운로드 링크를 눌렀을 때 다른 연결 프로그램으로 이동 하는 거를 막아야 한다.
작성한 글이 있으니 참고하기
✅ WRITE_EXTERNAL_STORAGE 권한 허용
✅ WebViewClient의 shouldOverrideUrlLoading에서 loadUrl(request?.url.toString()) 주기