메뉴 건너뛰기

조회 수 9246 추천 수 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
번호 제목 날짜 조회 수
217 prepend(),append(),before(),after() 메서드 2014.10.20 7361
216 TextureView를 이용한 카메라 Preview 좌우 반전 2015.06.10 14216
215 안드로이드 NDK 개발환경 만들기 / 이클립스 NDK 설정 file 2015.06.10 7890
214 안드로이드 소스 코드 보호 기법 2015.06.29 8336
213 Java Applet과 javascript와의 통신 2015.06.29 7754
212 android SMS 리시버 2015.06.29 6871
211 폰갭(PhoneGap) & jQuery Mobile 로 안드로이드 어플 개발 file 2015.06.29 7839
210 폰갭(PhoneGap) 에서 페이지들간의 이동 2015.06.29 8468
209 폰갭(PhoneGap) 플러그인 사용하기 2015.06.29 7359
208 폰갭(PhoneGap) 플러그인 만들기 2015.06.29 8433
207 안드로이드 - 소방시설바이블 어플 소스 ( 폰갭, 폰갭플러그인, assets 폴더안의 파일 이용, pdf 리더기 선택, 유튜브재생기 선택 ) file 2015.06.29 7976
206 안드로이드 소스 - 카메라 플래쉬(Flash, 후라시) 앱 file 2015.06.29 8973
205 안드로이드 맵 API key (배포용 맵키) file 2015.07.01 8103
204 [Android 2.3] spinner file 2015.07.01 7647
203 [Android 2.3] SharePreference 2015.07.01 7051
202 Invalid project description 문제 file 2015.07.01 7118
201 푸시 서비스(GCM)에 대해 알아보자 file 2015.07.01 7000
200 블루투스(Bluetooth) 통신에 대해 알아보자 file 2015.07.01 7983
199 문자를 음성으로 변환(TTS)에 대해 알아보자 file 2015.07.01 7768
» 다운로드 매니저(DownloadManager)에 대해 알아보자 file 2015.07.01 9246
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved