DownloadManager

下载文件:

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());
		}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值