没有文件大小的限制,但可用磁盘空间可能是一个限制。
对于失败的下载,使用DownloadManager.Query 检查下载的COLUMN_STATUS 和COLUMN_REASON 值,以确定发生了什么。
在this sample app 中,我下载了一个带有DownloadManager 的文件,并且我有一个可以让您查看状态信息的按钮。
当您请求下载时,您会收到一个 int 回复,这是一个下载请求 ID:
lastDownload=mgr.enqueue(req);
当用户点击相应的按钮时,我会查询下载状态,将部分信息记录到 LogCat,并显示Toast:
private void queryStatus(View v) {
Cursor c=
mgr.query(new DownloadManager.Query().setFilterById(lastDownload));
if (c == null) {
Toast.makeText(getActivity(), R.string.download_not_found,
Toast.LENGTH_LONG).show();
}
else {
c.moveToFirst();
Log.d(getClass().getName(),
"COLUMN_ID: "
+ c.getLong(c.getColumnIndex(DownloadManager.COLUMN_ID)));
Log.d(getClass().getName(),
"COLUMN_BYTES_DOWNLOADED_SO_FAR: "
+ c.getLong(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)));
Log.d(getClass().getName(),
"COLUMN_LAST_MODIFIED_TIMESTAMP: "
+ c.getLong(c.getColumnIndex(DownloadManager.COLUMN_LAST_MODIFIED_TIMESTAMP)));
Log.d(getClass().getName(),
"COLUMN_LOCAL_URI: "
+ c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)));
Log.d(getClass().getName(),
"COLUMN_STATUS: "
+ c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)));
Log.d(getClass().getName(),
"COLUMN_REASON: "
+ c.getInt(c.getColumnIndex(DownloadManager.COLUMN_REASON)));
Toast.makeText(getActivity(), statusMessage(c), Toast.LENGTH_LONG)
.show();
c.close();
}
}
private String statusMessage(Cursor c) {
String msg="???";
switch (c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS))) {
case DownloadManager.STATUS_FAILED:
msg=getActivity().getString(R.string.download_failed);
break;
case DownloadManager.STATUS_PAUSED:
msg=getActivity().getString(R.string.download_paused);
break;
case DownloadManager.STATUS_PENDING:
msg=getActivity().getString(R.string.download_pending);
break;
case DownloadManager.STATUS_RUNNING:
msg=getActivity().getString(R.string.download_in_progress);
break;
case DownloadManager.STATUS_SUCCESSFUL:
msg=getActivity().getString(R.string.download_complete);
break;
default:
msg=
getActivity().getString(R.string.download_is_nowhere_in_sight);
break;
}
return(msg);
}