투케이2K

468. (kotlin/코틀린) DownloadManager 다운로드 매니저 사용해 이미지 파일 다운로드 및 갤러리에 저장 실시 - DIRECTORY_PICTURES 본문

Kotlin

468. (kotlin/코틀린) DownloadManager 다운로드 매니저 사용해 이미지 파일 다운로드 및 갤러리에 저장 실시 - DIRECTORY_PICTURES

투케이2K 2024. 4. 2. 19:59

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

        // ---------------------------------------------------------------
        // [로직 처리 실시]
        // ---------------------------------------------------------------
        try {

            /**
             * // -----------------------------------------
             * [요약 설명]
             * // -----------------------------------------
             * 1. 사전 사용자로부터 권한 획득 필요
             *
             * >> 안드로이드 13 이상
             * AndroidManifest : READ_MEDIA_IMAGES , READ_MEDIA_VIDEO , READ_MEDIA_AUDIO
             *
             * >> 안드로이드 10 이상
             * AndroidManifest : READ_EXTERNAL_STORAGE
             *
             * >> 안드로이드 10 미만
             * AndroidManifest : WRITE_EXTERNAL_STORAGE , READ_EXTERNAL_STORAGE
             *
             * // -----------------------------------------
             * 2. 참고 내용 :
             *
             * 안드로이드 10 (Q) 이상은 WRITE_EXTERNAL_STORAGE 권한이 없어도
             * 공용 공간인 갤러리에 사진을 내보낼 수 있습니다 (다운로드, 사진 디렉토리 쓰기 가능)
             *
             * >> 안드로이드 10 미만은 해당 권한 필요
             * // -----------------------------------------
             * 3. 참고 내용 :
             *
             * DownloadManager 를 사용해 파일을 저장하기 위해서는 공용 접근이 가능한 외부 저장소 경로 여야합니다
             * // -----------------------------------------
             */


            // [파일 다운로드 URL 주소 선언]
            val fileUrl = "http://img.test.com/big/test.jpg"


            // [파일 저장 명칭 지정]
            val currentTimeMillis = System.currentTimeMillis()
            val simpleDateFormat = SimpleDateFormat("yyyyMMddkkmmss")
            val fileName = simpleDateFormat.format(Date(currentTimeMillis)) + ".jpg"


            // [다운로드 매니저 선언 및 파일 다운로드 수행]
            val manager = getSystemService(DOWNLOAD_SERVICE) as DownloadManager
            val uri = Uri.parse(fileUrl.trim { it <= ' ' }) // [파일 다운로드 주소 : 확장자명 포함되어야함]

            val request = DownloadManager.Request(uri) // [다운로드 매니저 객체 생성]
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) // [앱 상단에 다운로드 표시]
            request.setTitle(fileName) // [다운로드 제목 표시]
            request.setDescription("Download ... ") // [다운로드 중 표시되는 내용]
            request.setNotificationVisibility(1) // [앱 상단에 다운로드 상태 표시]
            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, fileName) // [다운로드 폴더 지정 : 갤러리]
            request.setAllowedOverMetered(true) // [네트워크가 연결 된 경우에도 다운로드]
            manager.enqueue(request) // [다운로드 수행]

        } catch (e: Exception) {
            e.printStackTrace()
        }
 

[결과 출력]

 

[1] : 앱 노티피케이션 표시 부분에 파일 다운로드 알림 확인

[2] : 갤러리 폴더에 저장 된 사진 확인

 

반응형
Comments