我想使用下载管理器下载一个zip文件.使用此代码显示通知中的下载文件,后来显示下载失败.我给了读写外部目录等权限.我的代码如下:
if(DownloadTask.readAndWriteExternalStorage(context)){
downloadManager=
(DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
Uri uri=Uri.parse("url of zip");
DownloadManager.Request request= new
DownloadManager.Request(uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE|
DownloadManager.Request.NETWORK_WIFI);
request.setVisibleInDownloadsUi(true);
request.setTitle("Example");
request.setDescription("Downloading a very large zip");
request.setAllowedOverRoaming(true);
request.setMimeType("df.zip");
request.allowScanningByMediaScanner();
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,
"df.zip");
request.setNotificationVisibility(DownloadManager.
Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
Long reference=downloadManager.enqueue(request);
}
解决方法:
我解决了这个问题:
DownloadManager downloadManager;
private int count = 0;
private long Zip_DownloadId,imid;
Uri uri =
Uri.parse("http://website//"+rowItems.get(i).get("Attachments"));
if ( uri.toString().endsWith(".jpg")) {
imid=DownloadData(uri, view);
Check_Image_Status(imid);
} else if (uri.toString().endsWith(".png")) {
imid=DownloadData(uri, view);
Check_Image_Status(imid);
} else if (uri.toString().endsWith(".jpeg")) {
imid=DownloadData(uri, view);
Check_Image_Status(imid);
} else if (uri.toString().endsWith(".zip")) {
Zip_DownloadId = DownloadData(uri, view);
Check_Zip_Status(Zip_DownloadId);
}
Toast.makeText(getApplicationContext(),uri.toString(),Toast.LENGTH_LONG).show();
}
});
downloadReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//check if the broadcast message is for our Enqueued download
long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (referenceId == imid) {
Toast toast = Toast.makeText(SupportTicketViewActivity.this,
"Image Download Complete", Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, 25, 400);
toast.show();
} else if (referenceId == Zip_DownloadId) {
Toast toast = Toast.makeText(SupportTicketViewActivity.this,
"Zip Download Complete", Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, 25, 400);
toast.show();
}
}
};
return view;
}
private void Check_Zip_Status(long Zip_DownloadId) {
DownloadManager.Query ZipDownloadQuery = new DownloadManager.Query();
//set the query filter to our previously Enqueued download
ZipDownloadQuery.setFilterById(Zip_DownloadId);
//Query the download manager about downloads that have been requested.
Cursor cursor = downloadManager.query(ZipDownloadQuery);
if (cursor.moveToFirst()) {
DownloadStatus(cursor, Zip_DownloadId);
}}
private void Check_Image_Status(long imid) {
DownloadManager.Query ImageDownloadQuery = new DownloadManager.Query();
//set the query filter to our previously Enqueued download
ImageDownloadQuery.setFilterById(imid);
//Query the download manager about downloads that have been requested.
Cursor cursor = downloadManager.query(ImageDownloadQuery);
if(cursor.moveToFirst()){
DownloadStatus(cursor, imid);
}
}
private void DownloadStatus(Cursor cursor, long DownloadId) {
int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
int status = cursor.getInt(columnIndex);
//column for reason code if the download failed or paused
int columnReason = cursor.getColumnIndex(DownloadManager.COLUMN_REASON);
int reason = cursor.getInt(columnReason);
//get the download filename
int filenameIndex = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME);
String filename = cursor.getString(filenameIndex);
String statusText = "";
String reasonText = "";
switch(status){
case DownloadManager.STATUS_FAILED:
statusText = "STATUS_FAILED";
switch(reason){
case DownloadManager.ERROR_CANNOT_RESUME:
reasonText = "ERROR_CANNOT_RESUME";
break;
case DownloadManager.ERROR_DEVICE_NOT_FOUND:
reasonText = "ERROR_DEVICE_NOT_FOUND";
break;
case DownloadManager.ERROR_FILE_ALREADY_EXISTS:
reasonText = "ERROR_FILE_ALREADY_EXISTS";
break;
case DownloadManager.ERROR_FILE_ERROR:
reasonText = "ERROR_FILE_ERROR";
break;
case DownloadManager.ERROR_HTTP_DATA_ERROR:
reasonText = "ERROR_HTTP_DATA_ERROR";
break;
case DownloadManager.ERROR_INSUFFICIENT_SPACE:
reasonText = "ERROR_INSUFFICIENT_SPACE";
break;
case DownloadManager.ERROR_TOO_MANY_REDIRECTS:
reasonText = "ERROR_TOO_MANY_REDIRECTS";
break;
case DownloadManager.ERROR_UNHANDLED_HTTP_CODE:
reasonText = "ERROR_UNHANDLED_HTTP_CODE";
break;
case DownloadManager.ERROR_UNKNOWN:
reasonText = "ERROR_UNKNOWN";
break;
}
break;
case DownloadManager.STATUS_PAUSED:
statusText = "STATUS_PAUSED";
switch(reason){
case DownloadManager.PAUSED_QUEUED_FOR_WIFI:
reasonText = "PAUSED_QUEUED_FOR_WIFI";
break;
case DownloadManager.PAUSED_UNKNOWN:
reasonText = "PAUSED_UNKNOWN";
break;
case DownloadManager.PAUSED_WAITING_FOR_NETWORK:
reasonText = "PAUSED_WAITING_FOR_NETWORK";
break;
case DownloadManager.PAUSED_WAITING_TO_RETRY:
reasonText = "PAUSED_WAITING_TO_RETRY";
break;
}
break;
case DownloadManager.STATUS_PENDING:
statusText = "STATUS_PENDING";
break;
case DownloadManager.STATUS_RUNNING:
statusText = "STATUS_RUNNING";
break;
case DownloadManager.STATUS_SUCCESSFUL:
statusText = "STATUS_SUCCESSFUL";
reasonText = "Filename:\n" + filename;
break;
}
if (DownloadId == Zip_DownloadId) {
Toast toast = Toast.makeText(SupportTicketViewActivity.this,
"Zip Download Status:" + "\n" + statusText + "\n" +
reasonText,
Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, 25, 400);
toast.show();
} else {
Toast toast = Toast.makeText(SupportTicketViewActivity.this,
"Image Download Status:" + "\n" + statusText + "\n" +
reasonText,
Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, 25, 400);
toast.show();
// Make a delay of 3 seconds so that next toast (Music Status) will not merge with this one.
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
}
}, 3000);
}
}
}
private long DownloadData(Uri uri, View view) {
long downloadReference;
downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(uri);
//Setting title of request
request.setTitle("Data Download");
//Setting description of request
request.setDescription("Android Data download using DownloadManager.");
//Set the local destination for the downloaded file to a path within the application's external files directory
if(uri.toString().endsWith(".jpg")) {
request.setDestinationInExternalFilesDir(SupportTicketViewActivity.this, Environment.DIRECTORY_DOWNLOADS, "AndroidTutorialPoint.jpg");
}else if (uri.toString().endsWith(".zip")){
request.setDestinationInExternalFilesDir(SupportTicketViewActivity.this, Environment.DIRECTORY_DOWNLOADS, "AndroidTutorialPoint.zip");
}else if(uri.toString().endsWith(".png")) {
request.setDestinationInExternalFilesDir(SupportTicketViewActivity.this, Environment.DIRECTORY_DOWNLOADS, "AndroidTutorialPoint.png");
} else if(uri.toString().endsWith(".jpeg")) {
request.setDestinationInExternalFilesDir(SupportTicketViewActivity.this, Environment.DIRECTORY_DOWNLOADS, "AndroidTutorialPoint.jpeg");
} //Enqueue download and save the referenceId
downloadReference = downloadManager.enqueue(request);
return downloadReference;
}