android DownloadManager的自定义工具类DownloadManagerUtil
2013-12-24 16:43
741 查看
1.定义DownloadManagerUtil 类
package core.common;
import android.app.DownloadManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
/**
* use: DownloadManagerUtil.download(context, url, savePath, saveName, completeListener);
* or use: DownloadManagerUtil.download(context, url, completeListener)
*/
public class DownloadManagerUtil {
public static long download(Context context, String url, String savePath, String saveName, DownloadCompleteListener completeListener){
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
saveName = saveName != null ? saveName : url.substring(url.lastIndexOf('/') + 1);
if(savePath == null){
request.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, saveName);
}else {
if(savePath.indexOf("/mnt/sdcard/") > -1){
savePath = savePath.replace("/mnt/sdcard/", "");
Log.e("savePath", savePath);
}
request.setDestinationInExternalPublicDir(savePath, saveName);
}
long downloadId = downloadManager.enqueue(request);
Log.d("download", "downloadId: " + downloadId);
registerCompleteReceiver(context, downloadId, completeListener);
return downloadId;
}
public static long download(Context context, String url, DownloadCompleteListener completeListener){
return download(context, url, null, null, completeListener);
}
public interface DownloadCompleteListener{
public void onComplete(DownloadManager downloadManager, long completeDownloadId);
}
private static void registerCompleteReceiver(Context context, long downloadId, DownloadCompleteListener completeListener){
context.registerReceiver(new DownloadManagerUtil().new DownloadManagerReceiver(downloadId, completeListener), new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
private class DownloadManagerReceiver extends BroadcastReceiver {
private long downloadId;
private DownloadCompleteListener completeListener;
public DownloadManagerReceiver(long downloadId, DownloadCompleteListener completeListener){
this.downloadId = downloadId;
this.completeListener = completeListener;
}
@Override
public void onReceive(Context context, Intent intent) {
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
long completeDownloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
Log.d("CompleteReceiver", "completeDownloadId: " + completeDownloadId + ", currentDownloadId: " + downloadId);
if(downloadId == completeDownloadId){
completeListener.onComplete(downloadManager, downloadId);
}
context.unregisterReceiver(this);
}
}
}
2.DownloadManagerUtil的使用: 下载、监听下载完成
//long downloadId = DownloadManagerUtil.download(context, url, savePath, saveFileName, completeListener);
long downloadId = DownloadManagerUtil.download(context, url, completeListener);
举例:
自己封装的,水平有限,如有不足的地方欢迎指正。
package core.common;
import android.app.DownloadManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
/**
* use: DownloadManagerUtil.download(context, url, savePath, saveName, completeListener);
* or use: DownloadManagerUtil.download(context, url, completeListener)
*/
public class DownloadManagerUtil {
public static long download(Context context, String url, String savePath, String saveName, DownloadCompleteListener completeListener){
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
saveName = saveName != null ? saveName : url.substring(url.lastIndexOf('/') + 1);
if(savePath == null){
request.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, saveName);
}else {
if(savePath.indexOf("/mnt/sdcard/") > -1){
savePath = savePath.replace("/mnt/sdcard/", "");
Log.e("savePath", savePath);
}
request.setDestinationInExternalPublicDir(savePath, saveName);
}
long downloadId = downloadManager.enqueue(request);
Log.d("download", "downloadId: " + downloadId);
registerCompleteReceiver(context, downloadId, completeListener);
return downloadId;
}
public static long download(Context context, String url, DownloadCompleteListener completeListener){
return download(context, url, null, null, completeListener);
}
public interface DownloadCompleteListener{
public void onComplete(DownloadManager downloadManager, long completeDownloadId);
}
private static void registerCompleteReceiver(Context context, long downloadId, DownloadCompleteListener completeListener){
context.registerReceiver(new DownloadManagerUtil().new DownloadManagerReceiver(downloadId, completeListener), new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
private class DownloadManagerReceiver extends BroadcastReceiver {
private long downloadId;
private DownloadCompleteListener completeListener;
public DownloadManagerReceiver(long downloadId, DownloadCompleteListener completeListener){
this.downloadId = downloadId;
this.completeListener = completeListener;
}
@Override
public void onReceive(Context context, Intent intent) {
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
long completeDownloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
Log.d("CompleteReceiver", "completeDownloadId: " + completeDownloadId + ", currentDownloadId: " + downloadId);
if(downloadId == completeDownloadId){
completeListener.onComplete(downloadManager, downloadId);
}
context.unregisterReceiver(this);
}
}
}
2.DownloadManagerUtil的使用: 下载、监听下载完成
//long downloadId = DownloadManagerUtil.download(context, url, savePath, saveFileName, completeListener);
long downloadId = DownloadManagerUtil.download(context, url, completeListener);
举例:
long downloadId = DownloadManagerUtil.download(context, apkUrl, upgradeBean.getDownloadSavePath(), upgradeBean.getDownloadSaveFileName(), new DownloadManagerUtil.DownloadCompleteListener() { @Override public void onComplete(DownloadManager downloadManager, long completeDownloadId) { DownloadManager.Query myDownloadQuery = new DownloadManager.Query(); myDownloadQuery.setFilterById(completeDownloadId); Cursor myDownload = downloadManager.query(myDownloadQuery); if (myDownload.moveToFirst()) { int fileNameIdx = myDownload.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME); int fileUriIdx =myDownload.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI); String fileName = myDownload.getString(fileNameIdx); String fileUri = myDownload.getString(fileUriIdx); Log.d("CompleteReceiver", fileName + " : " + fileUri); // // } myDownload.close(); } });
自己封装的,水平有限,如有不足的地方欢迎指正。
相关文章推荐
- android 代码实现控件之间的间距
- 解決Linux下Android开发真机调试设备不被识别问题
- [Android]在代码里运行另一个程序的方法
- [软件咨询]WPS2012正式版已发布 金山Office移动版4.0发布
- Android笔记-Linux Kernel Ftrace (Function Trace)解析
- android USB如何修改VID具体实现
- Android Mouse实现过程详细笔记
- 深入Android Browser配置管理的详解
- Android Mms之:深入理解对话列表管理
- Android APP与媒体存储服务的交互
- android 多线程技术应用
- Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解
- Android数据类型之间相互转换系统介绍
- 通过Android trace文件分析死锁ANR实例过程
- Android实现左右滑动效果的方法详解
- Android 各国语言缩写及简称详细介绍
- Android 自动判断是电话,网址,EMAIL方法之Linkify的使用
- android IPC之binder通信机制
- Android应用开发中模拟按下HOME键的效果(实现代码)
- Android 读写文件方法汇总