您的位置:首页 > 移动开发 > Android开发

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

举例:

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 DownloadManager