DownloadManager 사용 방법: 1

9897 단어 AndroidStep
파일 다운로드
 DownloadManager downloadManager = (DownloadManager) MainActivity.this.getSystemService(DOWNLOAD_SERVICE);
                Uri uri = Uri.parse("http://www.apk3.com/uploads/soft/201504/vnuuuxvobiu.apk");
                DownloadManager.Request request = new DownloadManager.Request(uri);               
                long download_id = downloadManager.enqueue(request);
                //返回值download_id是一个比较重要的参数,主要用来查询

이상 의 절 차 는 비교적 간단 한 다운로드 코드 이다.
1. 이 파일 은 시스템 파일 다운로드 의 기본 경로 에 저 장 됩 니 다.
2. 그리고 인터넷 환경 에 상 관 없 이 (와 이 파이, 모 바 일) 다운 로드 를 실행 합 니 다.
3. 휴대 전화 에 인터넷 연결 이 없 을 때 다운로드 작업 은 수행 되 지만 '연결 대기' 상태 에 있 고 휴대 전화 네트워크 연결 이 원활 해 지면 자동 으로 다운로드 작업 이 시 작 됩 니 다.
4. 다운로드 과정 에서 네트워크 연결 을 중단 하고 '연결 대기' 상태 에 있 으 며 네트워크 가 원활 해 지면 자동 으로 다운로드 작업 이 시 작 됩 니 다.
5. 경로 에 이 파일 이 이미 존재 할 때 자동 으로 교체 방식 으로 이름 을 짓 습 니 다.
6. 같은 작업 을 여러 번 반복 하면 서 다운로드 할 수 있 습 니 다.
7. 다운로드 한 연결 이 잘못 되면 Notification 은 '연결 대기 상태' 로 계속 멈 추고 수 동 으로 제거 할 수 없습니다.
DownloadManager的使用方法:一_第1张图片
DownloadManager的使用方法:一_第2张图片
다운로드 위치 및 파일 이름 지정
request.setDestinationInExternalFilesDir(context,"TestDownload","Test.apk");

 request.setDestinationInExternalPublicDir("TestDownload","Test.apk");

이 두 가지 방법의 뒤의 두 매개 변 수 는 각각 '파일 경로', '파일 이름' 이다.
setDestinationInExternalFilesDir 방법
//官方文档说明
Set the local destination for the downloaded file to a path within the application's external files directory (as returned by getExternalFilesDir(String).

이 방법 은 파일 을 다운로드 하 는 경 로 를 만 드 는 것 입 니 다. 파일 경로 의 '특성' 은 getExternal FilesDir (String) 와 유사 합 니 다.
getExternalFilesDir(String)
이 방법의 반환 값 은 폴 더 입 니 다. 이 폴 더 는 SD 카드 에 생 성 된 Android/data/data/your 입 니 다.package/.
그 는 일반적으로 당신 의 app 실행 에 필요 한 파일 을 저장 하 는 데 사 용 됩 니 다 (예 를 들 어 인터넷 의 일부 그림 의 캐 시).
기본적으로 이 폴 더 는 현재 app 만 접근 할 수 있 습 니 다.
프로그램 이 마 운 트 해제 되면 이 폴 더 의 데이터 가 사라 집 니 다.
setDestinationInExternal PublicDir 방법
//官方说明
Set the local destination for the downloaded file to a path within the public external storage directory (as returned by getExternalStoragePublicDirectory(String)).

이 방법 도 하나의 경 로 를 만 드 는 데 사 용 됩 니 다. 이 경로 의 특성 은 getExternalStorage PublicDirectory (String) 와 유사 합 니 다.
getExternalStoragePublicDirectory(String))
이 방법의 반환 값 은 폴 더 입 니 다. 이 폴 더 는 SD 카드 루트 디 렉 터 리 에 만 들 어 졌 습 니 다 (mnt/sdcard/)
이 폴 더 의 내용 은 다른 프로그램 에서 접근 할 수 있 습 니 다. (접근 제어 가 없습니다)
프로그램 을 마 운 트 해제 할 때 이 폴 더 의 내용 을 잃 어 버 리 지 않 습 니 다.
다운로드 할 네트워크 형식 지정
지정 형식
//指定在WIFI状态下,执行下载操作。
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
//指定在MOBILE状态下,执行下载操作
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE);

로 밍 상태 에서 다운로드 작업 을 실행 할 수 있 습 니까?request.setAllowedOverRoaming(boolean); 방법 으로 로 밍 상태 에서 작업 을 수행 하 는 것 에 동의 하 는 지 설정 합 니 다.(true, 허용, false 는 허용 하지 않 습 니 다. 기본 값 은 허용 합 니 다.)
"계량 식 네트워크 연결"다운로드 작업 을 허용 할 지 여부request.setAllowedOverMetered(boolean); 기본적으로 허용 된다.
//당신 의 인터넷 트 래 픽 소모 에 따라 유 료 네트워크
Internet service providers can charge by the amount of data used (the amount of data sent and received by your PC). That's called a metered Internet connection. These plans often have a data limit, and if you exceed the limit you might have to pay extra. In some cases, you aren't charged extra but your connection speed becomes slower until the billing cycle ends.

If you have a metered Internet connection, setting your network connection to metered in Windows can help you reduce the amount of data you send and receive.

알림 스타일 맞 춤 설정
Notification 의 제목 과 설명 설정
request.setTitle("标题");  
request.setDescription("描述"); 

Notification 의 표시 와 숨 김 을 설정 합 니 다.
request.setNotificationVisibility(visibility);

VISIBILTY_HIDDEN: Notification 은 표시 되 지 않 습 니 다. 이 속성 을 설정 하면 권한 을 추가 해 야 합 니 다 android.permission.DOWNLOAD_WITHOUT_NOTIFICATION.VISIBILITY_VISIBLE: Notification 은 표시 되 지만 다운로드 작업 을 수행 하 는 과정 에서 만 표시 되 며 다운로드 완료 가 자동 으로 사라 집 니 다.(기본 값)
VISIBILITY_VISIBLE_NOTIFY_COMPLETED: Notification 표시, 다운로드 진행 시, 완료 후 모두 표 시 됩 니 다.
VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION: 작업 이 완료 되 었 을 때 만 알림 이 표 시 됩 니 다.
DownloadManger 의 라디오 이벤트
이러한 종류의 방송 은 특정한 시간 에 자동 으로 발송 되 며, 우 리 는 자신의 Receiver 를 맞 춰 방송 을 받 으 면 됩 니 다. 방송 등록 후 Activity 가 소 각 될 때 로그아웃 하여 메모리 유출 을 피 하 는 것 을 기억 하 세 요.
IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
receiver = new DownloadCompleteReceiver();
registerReceiver(receiver,filter);
class DownloadCompleteReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

            long downloaded_id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID,-1);

           /* Log.d(getPackageName(),"下载完成:"+"downloaded_id ="+downloaded_id+"----" +"download_id="+download_id1+"");
            Log.d(getPackageName(),"下载完成:"+"downloaded_id ="+downloaded_id+"----" +"download_id="+download_id2+"");*/
            if(download_id1 == downloaded_id){
                Log.d(getPackageName(),"下载完成:"+"downloaded_id ="+downloaded_id);
            }
            if(download_id2 == downloaded_id){
                Log.d(getPackageName(),"下载完成:"+"downloaded_id ="+downloaded_id);
            }
        }

    }

다운로드 완료 시 보 내 는 라디오.
대응 하 는 Action 은: ACTIONDOWNLOAD_COMPLETE
Notification 이 클릭 되 었 을 때 보 내 는 라디오 입 니 다.
대응 하 는 Action 은: ACTIONNOTIFICATION_CLICKED
모든 다운로드 상황 을 보 는 방송.
대응 하 는 Action 은: ACTIONVIEW_DOWNLOADS
미완이다

좋은 웹페이지 즐겨찾기