메뉴 건너뛰기

조회 수 9239 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

안드로이드 2.3 버전부터 인터넷 다운로드 작업을 지원하는 다운로드 매니저(DownloadManager)라는 프레임워크를 제공한다


만약 다운로드해야 할 데이터가 크거나 또는 당장 사용하지 않는다면, java.net 패키지나 HttpClient 컴포넌트를 사용하는 것보다 안드로이드에서 제공하는 다운로드 매니저를 사용하는 것도 생각해 볼만하다


일단 다운로드 매니저가 다운로드 작업을 실행하면, 아래 그림처럼 노티피케이션 리스트와 상태바에 나타난다. 그리고 다운로드가 완료되면 노티피케이션에서 다운로드 항목이 사라지면서 단말기 내 애플리케이션들에 다운로드가 완료되었다는 사실을 브로드캐스트로 보낸다

1.png



만약 다운로드 되자마자 사용자가 직접 다운로드된 파일을 보고자 한다면, 브로드캐스트 리시버를 만들어야 한다


일반적으로 다운로드된 데이터는 SD 카드에 저장하므로 다음과 같이 외장형 저장소에 대한 사용 권한을 얻어야 한다

2.png



다운로드 매니저 클래스는 android.app 패키지에서 다음과 같이 세 종류의 클래스로 제공된다

 

  • DownloadManager : 다운로드 시작/취소, 다운로드 파일 열기, 다운로드한 파일을 조회할 수 있는 메서드를 제공한다
  • DownloadManager.Request : 다운로드 시작에 필요한 정보를 제공한다
  • DownloadManager.Query : 다운로드된 파일을 찾고 조회하는 기능을 제공한다

다운로드 작업은 다음과 같은 단계로 작업이 이루어진다
  • 다운로드 작업 준비
    • 사용자가 다운로드할 데이터를 선택한다
    • 3.png


    • 브로드캐스트 리시버를 등록한다 
      • ACTION_DOWNLOAD_COMPLETE : 다운로드가 완료되었을 때 발송
      • ACTION_NOTIFICATION_CLICKED : 사용자가 노티피케이션 상태바를 클릭 시 발생 
  • 다운로드 매니저 객체를 생성한다
    • 4.png


  • 다운로드 대기열에 URI 객체를 넣는다 
    • 5.png


    • 만약 다운로드를 취소하고 싶다면 반환받은 아이디를 매개변수로 사용하여 remove 메서드를 호출한다 
    • DownloadManager.Request setTitle(title) : 다운로드 데이터의 제목을 정함
    • DownloadManager.Request setDescription(desc) : 다운로드 데이터의 세부 설명을 정함
    • DownloadManager.Request setAllowedNetworkTypes(flags) : 다운로드 진행 시 사용 가능한 3G 망이나 와이파이 등의 네트워크 종류를 설정한다. 네트워크 종류를 명시하지 않으면 연결된 네트워크에서 다운로드가 진행된다 
    • DownloadManager.Request setDestinationUri(uri) : 다운로드 데이터가 저장될 경로를 지정한다 
  • 다운로드 프레임워크는 사용자에게 노티피케이션으로 진행 상태를 알린다 
    • 안드로이드 시스템에서 알아서 처리하는 작업이다

다음 예제는 다운로드 매니저를 이용하여 이미지를 다운받아 화면에 출력하는 프로그램이다

액티비티 소스
6.jpg




브로드캐스트 리시버 소스
7.jpg




위 소스의 DownlaodManager.Query 클래스는 다운로드한 데이터(또는 리소스)를 찾기 위해 입력한 조건 객체이다

 DownlaodManager.Query 클래스에서 제공하는 생성자와 메서드는 다음과 같다
  • DownlaodManager.Query() : 다운로드한 데이터를 찾는 DownlaodManager.Query 객체를 생성한다
  • DownlaodManager.Query setFilterById(long..ids) : 매개 변수로 제공한 id는 enqueue() 메서드를 호출하였을 때 반환받은 아이디이다
  • DownlaodManager.Query setFilterByStatus(int flags) : 특정 다운로드한 데이터의 상태를 매개 변수로 사용하여 데이터를 찾는다 
  • DownlaodManager query(DownlaodManager.Query query) : 다운로드한 데이터 중 조건이 일치하는 데이터를 검색하여 커서로 반환한다
  • ParcelFileDescriptor openDownloadFile(long id) : 다운로드되어 저장된 파일을 오픈한다

다운로드한 이후 데이터의 상태는 아래와 같이 커서 내 컬럼을 통해 제공된다
  • static final String COLUMN_STATUS (다운로드 받은 데이터 상태는 아래와 같은 상수로 나타낸다)
    • static final int STATUS_SUCCESSFUL
    • static final int STATUS_RUNNING
    • static final int STATUS_FAILED
    • static final int STATUS_PAUSED
  • static final String COLUMN_REASON
    • HTTP 프로토콜에서 제공하는 상태라인의 상태코드를 제공한다
  • static final String COLUMN_URI
    • 다운로드한 데이터를 가리키는 Uri 객체이다

위의 프로그램을 보면 PacelFileDescriptor.AutoCloseInputStream 클래스를 사용하고 있다
PacelFileDescriptor.AutoCloseInputStream 클래스는 작업 완료 후 close() 메서드를 자동으로 호출한다 

다운로드 매니저는 음악이나 동영상처럼 비교적 시간이 오래걸리는 작업들을 수행할 때 사용한다. 또한 다운로드된 데이터들은 외장 파일로 만들어 저장한다든가 또는 브로드캐스트를 만들어 보내는 작업을 한다



List of Articles
번호 제목 날짜 조회 수
237 안드로이드 채팅 소스 샘플 file 2015.07.26 10088
236 카카오톡 분석하기 (1) - sqlite 파해치기 file 2016.05.26 10060
235 네트워크 상태 변화 감지하기(BroadcastReceiver 사용) 2015.07.16 9934
234 FTPClient 를이용하여 ftp상 서버에서 데이터 다운로드 편 2014.08.28 9848
233 서버에서 이미지 불러와서 이미지뷰에 띄우기 file 2015.07.16 9842
232 ViewFlipper 사용하기 file 2015.07.16 9631
231 카카오톡 분석하기 (2) - 카카오톡 암호화 함수 찾기 file 2016.05.26 9598
230 안드로이드 php 로 mysql json 파싱 하기 2014.08.28 9407
229 [안드로이드] 팝업메뉴 사용법 file 2015.09.03 9386
228 탭 뷰에 탭 추가하기, 아이콘 넣기 file 2015.07.16 9358
227 AndroidManifest에 선언한 메타데이터(meta-data) 가져오기 2016.06.10 9301
226 안드로이드 팝업창 만들기(xml 내용 집어넣기) file 2015.07.23 9285
» 다운로드 매니저(DownloadManager)에 대해 알아보자 file 2015.07.01 9239
224 화면 전환해도 데이터 유지 예제 2015.07.26 9204
223 [안드로이드] 리스트 뷰의 한 항목에 대한 컨텍스트 메뉴 만들기 file 2015.09.04 9079
222 URL을 이용해서 이미지 다운로드 하기 (멀티 쓰레드 이용) file 2015.07.16 8992
221 안드로이드 소스 - 카메라 플래쉬(Flash, 후라시) 앱 file 2015.06.29 8973
220 Android Push GCM 프로젝트 앱 적용 하기(2) file 2016.03.18 8945
219 안드로이드 webview (웹뷰) 개발 #1 - 웹사이트를 어플로 만들어 보자! file 2015.07.17 8903
218 안드로이드 기본어플 예제 어플소스 모음 2015.08.17 8860
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved