DownloadManager

来源:互联网 发布:美国离线导航软件 编辑:程序博客网 时间:2024/05/21 21:38

下载文件:

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

@Overridepublic 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

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









0 0
原创粉丝点击