Android 호출 시스템 내부 다운로드 프로그램 다운로드 파일 (1)
5892 단어 Android
안 드 로 이 드 2.3 이전에 시스템 내부 의 다운로드 프로그램 을 호출 하여 다운로드 하려 면 직접 호출 할 수 없습니다. 브 라 우 저 를 통 해 만 호출 할 수 있 습 니 다. 다음 과 같 습 니 다.
Uri uri = Uri.parse(fileUrl);
Intent downloadIntent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(downloadIntent);
이렇게 하면 시스템 의 파일 을 직접 호출 하여 다운로드 할 수 있 습 니 다. 그러면 좋 은 점 이 있 습 니 다. 바로 현재 응용 프로그램 은 권한 을 설명 하지 않 아 도 물건 을 다운로드 할 수 있 기 때문에 네트워크 에 접근 할 수 있 는 권한 이 없 는 응용 프로그램 이 아니 라 네트워크 에 직접 접근 할 수 없다 고 할 수 있 습 니 다.
다운로드 한 파일 은 / mnt / sdcard / download 디 렉 터 리 아래 에 저 장 됩 니 다.현재 휴대 전화의 sdcard 를 사용 할 수 없다 면 다운로드 에 실패 할 수 있 지만, sdcard 를 사용 할 수 있 을 때 만 이 작업 을 계속 다운로드 할 수 있 습 니 다.
여기에 통제 하기 어 려 운 부분 이 있 습 니 다. 바로 파일 을 다운로드 한 후에 언제 다운로드 가 완 료 될 지 모 릅 니 다. 언제 다운로드 가 완 료 될 지 알 고 싶 으 면 sd 카드 위의 그 파일 의 크기 가 다운로드 한 url 이 방문 한 content - length 와 같 는 지 모니터링 해 야 합 니 다.
본문 주소:http://blog.csdn.net/whyrjj3/article/details/8000740
안 드 로 이 드 2.3 이후 시스템 은 내부 다운로드 프로그램 을 열 었 다.DownloadManager 같은 종 류 를 사용 할 수 있 게 되 었 습 니 다.사용 방법 은 다음 과 같다.
DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
Uri uri = Uri.parse("fileUrl");
Request request = new Request(uri);
// , wifi
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI);
// , , :android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
//request.setShowRunningNotification(false);
//
request.setVisibleInDownloadsUi(false);
/* , sdcard , , sdcard , /mnt/sdcard/Android/data/packageName/files , sdcard , , , /cache */
//request.setDestinationInExternalFilesDir(this, null, "tar.apk");
long id = downloadManager.enqueue(request);
//TODO id , , Preferences
이 때 프로그램 은 최소한 두 개의 권한 을 설명해 야 합 니 다.
이 방법 을 사용 하면 사용자 가 다운로드 과정 을 제어 할 수 있다. 즉, 다운로드 가 끝나 지 않 고 다운로드 하고 싶 지 않 으 면 다운 로드 를 중지 할 수 있 고 라디오 수신 자 를 등록 할 수 있 으 며 파일 을 다운로드 하면 라디오 를 받 을 수 있다.그리고 다운로드 한 파일 의 경 로 를 얻 을 수 있 습 니 다:
package cn.dotcreate.testProcess;
import android.app.DownloadManager;
import android.app.DownloadManager.Query;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.widget.Toast;
public class CompleteReceiver extends BroadcastReceiver {
private DownloadManager downloadManager;
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {
Toast.makeText(context, " ....", Toast.LENGTH_LONG).show();
long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0); //TODO id id ,
Query query = new Query();
query.setFilterById(id);
downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
Cursor cursor = downloadManager.query(query);
int columnCount = cursor.getColumnCount();
String path = null; //TODO , , , path
while(cursor.moveToNext()) {
for (int j = 0; j < columnCount; j++) {
String columnName = cursor.getColumnName(j);
String string = cursor.getString(j);
if(columnName.equals("local_uri")) {
path = string;
}
if(string != null) {
System.out.println(columnName+": "+ string);
}else {
System.out.println(columnName+": null");
}
}
}
cursor.close();
// sdcard , , , if(path.startsWith("content:")) {
cursor = context.getContentResolver().query(Uri.parse(path), null, null, null, null);
columnCount = cursor.getColumnCount();
while(cursor.moveToNext()) {
for (int j = 0; j < columnCount; j++) {
String columnName = cursor.getColumnName(j);
String string = cursor.getString(j);
if(string != null) {
System.out.println(columnName+": "+ string);
}else {
System.out.println(columnName+": null");
}
}
}
cursor.close();
}
}else if(action.equals(DownloadManager.ACTION_NOTIFICATION_CLICKED)) {
Toast.makeText(context, " ....", Toast.LENGTH_LONG).show();
}
}
}
목록 에 현재 이 receiver 를 등록 합 니 다:
설명 할 것 은 핸드폰 의 sdcard 가 사용 가능 하 다 면 위의 path 는 sdcard 위의 경로 입 니 다. sdcard 가 사용 되 지 않 으 면 그 경 로 는 콘 텐 츠 제공 자의 경로 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.