使用系统下载管理类DownloadManager
来源:互联网 发布:playclub陈诗涵mod数据 编辑:程序博客网 时间:2024/05/16 17:11
import java.io.File;import java.util.HashMap;import android.annotation.TargetApi;import android.app.DownloadManager;import android.app.DownloadManager.Query;import android.app.DownloadManager.Request;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.database.Cursor;import android.net.Uri;import android.os.Build;import android.text.TextUtils;import android.webkit.MimeTypeMap;import android.widget.Toast;/** * @Description: 调用系统下载管理类(api>=9) * @time: 2014-4-25 下午5:16:17 * @version: 1.0 */public class DownloadManagerCtrl { private static DownloadManagerCtrl mInstance; private DownloadManager dm; private Context mContext; private DownloadReceiver mReceiver; private HashMap<String, Long> downloadQueues = new HashMap<String, Long>(); private DownloadManagerCtrl(Context context) { mContext = context; mReceiver = new DownloadReceiver(); dm = (DownloadManager)context.getSystemService( Context.DOWNLOAD_SERVICE); } public static synchronized DownloadManagerCtrl getInstance(Context context) { if(null == mInstance) { mInstance = new DownloadManagerCtrl( context); } return mInstance; } @TargetApi(Build.VERSION_CODES.HONEYCOMB) private void addToDownload(String url) { Uri uri = Uri.parse( url); Request request = new Request( uri); // 设置可下载网络类型 request.setAllowedNetworkTypes( Request.NETWORK_MOBILE | Request.NETWORK_WIFI); // 不允许漫游 request.setAllowedOverRoaming( false); // 设置文件类型 MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); String mimeString = mimeTypeMap.getMimeTypeFromExtension( MimeTypeMap.getFileExtensionFromUrl( url)); request.setMimeType( mimeString); // 在通知栏中显示 request.setVisibleInDownloadsUi( true); request.setDescription( mContext.getResources().getString( R.string.app_download_description)); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { request.setNotificationVisibility( Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); } else { request.setShowRunningNotification( true); } // 下载路径 String fileName = url.substring( url.lastIndexOf( '/') + 1); int i = fileName.indexOf( '?'); if(i != -1) { fileName = fileName.substring( 0, i); } String dirType = FileUtil.getDownlaodPath( mContext); request.setDestinationInExternalPublicDir( dirType, fileName); long downloadId = dm.enqueue( request);// 加入下载队列 downloadQueues.put( url, downloadId); } public DownloadReceiver getReceiver() { return mReceiver; } public void startDownload(String url) { if(TextUtils.isEmpty( url)) { return; } Long downloadId = downloadQueues.get( url); if(null == downloadId) { addToDownload( url); } else { checkDownloadStatus( downloadId.longValue(), url); } } @TargetApi(Build.VERSION_CODES.HONEYCOMB) private void checkDownloadStatus(long downloadId, String url) { Query query = new Query(); query.setFilterById( downloadId); Cursor c = dm.query( query); if(c.moveToFirst()) { int columnIndex = c.getColumnIndex( DownloadManager.COLUMN_STATUS); int status = c.getInt( columnIndex); System.out.println( " status " + status); switch(status) { case DownloadManager.STATUS_SUCCESSFUL: // 已下载完成,若再次点击就进入安装界面 boolean installOk = false; if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { installOk = startInstall( dm.getUriForDownloadedFile( downloadId)); } else { String downloadFileUrl = c.getString( c.getColumnIndex( DownloadManager.COLUMN_LOCAL_URI)); installOk = startInstall( Uri.parse( downloadFileUrl)); } if(!installOk) { addToDownload( url); } break; case DownloadManager.STATUS_PAUSED: case DownloadManager.STATUS_PENDING: case DownloadManager.STATUS_RUNNING: // 暂定、挂起、下载中;提示已加入下载队列 Toast.makeText( mContext, "已加入下载队列", Toast.LENGTH_LONG).show(); break; case DownloadManager.STATUS_FAILED: // 下载失败,重新下载 addToDownload( url); break; default: break; } } else { // 本地文件已被删除,重新下载 addToDownload( url); } if(null != c) { c.close(); } } private class DownloadReceiver extends BroadcastReceiver { @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals( action)) { long downloadId = intent.getLongExtra( DownloadManager.EXTRA_DOWNLOAD_ID, 0); Query query = new Query(); query.setFilterById( downloadId); Cursor c = dm.query( query); if(c.moveToFirst()) { int columnIndex = c.getColumnIndex( DownloadManager.COLUMN_STATUS); if(DownloadManager.STATUS_SUCCESSFUL == c.getInt( columnIndex)) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { startInstall( dm.getUriForDownloadedFile( downloadId)); } else { String downloadFileUrl = c.getString( c.getColumnIndex( DownloadManager.COLUMN_LOCAL_URI)); startInstall( Uri.parse( downloadFileUrl)); } c.close(); } } } } } private boolean startInstall(Uri uri) { if(!new File( uri.getPath()).exists()) { System.out.println( " local file has been deleted! "); return false; } Intent intent = new Intent(); intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction( Intent.ACTION_VIEW); intent.setDataAndType( uri, "application/vnd.android.package-archive"); mContext.startActivity( intent); return true; }}
0 0
- 使用系统下载管理类DownloadManager
- Android系统下载管理DownloadManager
- Android系统下载管理DownloadManager
- Android系统下载管理DownloadManager功能介绍及使用示例
- Android系统下载管理DownloadManager功能介绍及使用示例
- Android系统下载管理DownloadManager功能介绍及使用示例
- Android系统下载管理DownloadManager功能介绍及使用示例
- Android系统下载管理DownloadManager功能介绍及使用示例
- Android系统下载管理DownloadManager功能介绍及使用示例
- Android系统下载管理DownloadManager功能介绍及使用示例
- Android 使用 DownloadManager 管理系统下载任务的方法
- Android 使用 DownloadManager 管理系统下载任务的方法
- Android 使用 DownloadManager 管理系统下载任务的方法
- Android系统下载管理DownloadManager功能介绍及使用示例
- Android系统下载管理DownloadManager功能介绍及使用示例
- Android使用DownloadManager管理系统下载任务的方法
- Android系统下载管理DownloadManager功能介绍及使用示例
- Android系统下载管理DownloadManager功能介绍及使用示例
- GMT和CST的转换
- linux下weblogic11g安装成功后,启动报错Getting boot identity from user
- 链式队列
- 防SQL注入
- 学习网址
- 使用系统下载管理类DownloadManager
- 【Leetcode Algorithm】Rectangle Area
- 关于交叉编译器默认体系结构的问题
- 攻克GRE阅读难关的方法
- 润乾填报表的时间参数设置
- 【Leetcode Algorithm】Invert Binary Tree
- Service 服务基础学习
- 常用排序算法总结
- Apache ServiceMix 介绍