package com.kugou.wushen;
import android.app.DownloadManager;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
public class UpdateNewVersion {
private Handler handler;
private Context context;
private ProgressDialog mProgress;
private long refernece;
public static final Uri CONTENT_URI = Uri.parse("content://downloads/my_downloads");
public UpdateNewVersion(Context _context,Handler _handler){
this.context = _context;
this.handler = _handler;
}
public void downNewApk(String url){
DownloadManager dManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
Uri uri = Uri.parse(url);
DownloadManager.Request request = new DownloadManager.Request(uri);
// 设置下载路径和文件名
int idx = url.lastIndexOf("/");
String apkName = url.substring(idx+1);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, apkName);
request.setDescription("舞神新版本下载");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setMimeType("application/vnd.android.package-archive");
// 设置为可被媒体扫描器找到
request.allowScanningByMediaScanner();
// 设置为可见和可管理
request.setVisibleInDownloadsUi(true);
refernece = dManager.enqueue(request);
// 把当前下载的ID保存起来
SharedPreferences sPreferences = context.getSharedPreferences("downloadcomplete", 0);
sPreferences.edit().putLong("refernece", refernece).commit();
DownloadChangeObserver observer = new DownloadChangeObserver(handler);
context.getContentResolver().registerContentObserver(CONTENT_URI, true, observer);
}
//用于显示下载进度
class DownloadChangeObserver extends ContentObserver{
public DownloadChangeObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange){
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(refernece);
DownloadManager dManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
final Cursor cursor = dManager.query(query);
if(cursor != null && cursor.moveToFirst()){
final int fileSizeIdx = cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES);
final int bytesDLIdx = cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR);
handler.post(new Runnable() {
public void run() {
Log.i("text", ""+cursor.getInt(bytesDLIdx)+"/"+cursor.getInt(fileSizeIdx));
UpdateDownloadProgress(cursor.getInt(bytesDLIdx),cursor.getInt(fileSizeIdx));
}
});
}
}
}
private void UpdateDownloadProgress(int cur, int total){
if(mProgress == null){
mProgress = new ProgressDialog(context);
mProgress.setIcon(R.drawable.app_icon);
mProgress.setTitle("舞神更新。。。");
mProgress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgress.setCancelable(false);
mProgress.setCanceledOnTouchOutside(false);
mProgress.setProgressNumberFormat("%dM/%dM");
mProgress.show();
}
mProgress.setMax(total/1024/1024);
mProgress.setProgress(cur/1024/1024);
}
}