下载文件:
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
Uri uri = Uri.parse("http://soft1.xitongzhijia.net:808/201202/Win7Loader.rar");
DownloadManager.Request request = new Request(uri);
dm.enqueue(request);
//设置漫游情况下是否下载
request.setAllowedOverRoaming(false);
//只允许WIFI环境下下载
request.setAllowedNetworkTypes(Request.NETWORK_WIFI);
//获取移动网络下载的最大值
Long maxBytes = DownloadManager.getMaxBytesOverMobile(this);
//默认情况下DownloadManager下载的文件不会被媒体扫描器扫描
request.allowScanningByMediaScanner();
//使下载的文件在系统的Downloads应用是可见和可管理的
request.setVisibleInDownloadsUi(true);
下载完成广播:
广播Action:DownloadManager.ACTION_DOWNLOAD_COMPLETE
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() == DownloadManager.ACTION_DOWNLOAD_COMPLETE) {
long longExtra = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (downloadId == longExtra) {
Log.d("DownloadReceiver", "longExtra:"+longExtra);
Query query = new Query();
query.setFilterById(downloadId);
Cursor cursor = dm.query(query);
if (cursor.moveToFirst()) {
String fileName = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
String fileUri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
Log.d("DownloadReceiver", "fileName:"+fileName+"---fileUri:"+fileUri);
}
cursor.close();
}
}
}
通过Query对象获取下载后文件的信息。
下载Notification点击的广播:
广播Action:DownloadManager.ACTION_NOTIFICATION_CLICKED
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() == DownloadManager.ACTION_NOTIFICATION_CLICKED) {
long[] longArrayExtra = intent.getLongArrayExtra(DownloadManager.EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS);
for (long longExtra : longArrayExtra) {
if (longExtra == downloadId) {
Log.d("DownloadNotificationReceiver", "longExtra:"+longExtra);
}
}
}
}
自定义Notification
request.setTitle("111xxx.rar");
request.setDescription("Resource File Download");
request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
Request.VISIBILITY_VISIBLE:默认值,当下载进行时,将显示一个持续的Notification表示持续时间。下载完成后,Notification移除。
Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED:下载完成后,继续显示在通知栏中,不会移除。
Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION:只有下载完成,Notification才会显示。(在android5.0上没效果)
Request.VISIBILITY_HIDDEN:不为下载显示Notification。需要权限 DOWNLOAD_WITHOUT_NOTIFICATION uses-permission
指定下载的位置
需要权限:android.permission.WRITE_EXTERNAL_STORAGE
//下载到指定的位置
File file = new File(Environment.getExternalStorageDirectory()+"/xxx/"+"xxx.rar");
request.setDestinationUri(Uri.fromFile(file));
request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOWNLOADS, "xxx.jpg");
//希望媒体扫描器扫描的文件
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MUSIC, "xxx.mp3");
取消和删除下载
downloadManager.remove(long...);
查询DownloadManager
通过query方法查询下载请求的状态、进度及详细信息,该方法返回一个cursor。
Query query = new Query();
query.setFilterByStatus(DownloadManager.STATUS_PAUSED);
Cursor cursor = dm.query(query);
while (cursor.moveToNext()) {
int reason = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_REASON));
String title = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE));
int fileSize = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
int downloadSize = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
String reasonStr = "Unknown";
switch (reason) {
case DownloadManager.PAUSED_QUEUED_FOR_WIFI:
reasonStr = "Waiting for Wifi";
break;
case DownloadManager.PAUSED_WAITING_FOR_NETWORK:
reasonStr = "Waiting for Connectivity";
break;
case DownloadManager.PAUSED_WAITING_TO_RETRY:
reasonStr = "Waiting for retry";
break;
}
StringBuffer sb = new StringBuffer();
sb.append("reason:"+reasonStr+"\n");
sb.append("title:"+title+"\n");
sb.append("filesize:"+fileSize+"\n");
sb.append("downloadSize:"+downloadSize);
Log.d("", sb.toString());
}