上一篇博客http://blog.csdn.net/u014310722/article/details/50544118里面写到利用ContentObserver来获取进度后,在button里面不会更新进度问题
这篇博客将介绍另一种方法来更新进度
利用Timer定时查询数据库里面的字段并显示
public class MainActivity extends Activity {
private Button mDownloadFileBtn;
private long downId;
private SharedPreferences mSharedPreference;
private ProgressBar mProgressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDownloadFileBtn = (Button) findViewById(R.id.download_btn);
mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
mProgressBar.setMax(100);
mSharedPreference = getSharedPreferences("demo", 0);
mDownloadFileBtn.setOnClickListener(new OnClickListener() {
@SuppressLint("NewApi")
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
downId = DownloadFile.downloadFile(MainActivity.this,
"http://n3.f.imoxiu.com/9ccf9a36960340713c5d3a74ec1fbf86b107fa6d");
// mThread.start();
SharedPreferences.Editor editor = mSharedPreference.edit();
editor.putLong("downloadId", downId);
editor.commit();
updateViews(downId);
}
});
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
downId = mSharedPreference.getLong("downloadId", 0);
updateViews(downId);
}
private void updateViews(final long downlaodId) {
final Timer myTimer = new Timer();
myTimer.schedule(new TimerTask() {
@SuppressLint("NewApi")
@Override
public void run() {
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(downlaodId);
Cursor cursor = ((DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE)).query(q);
cursor.moveToFirst();
int bytes_downloaded = cursor
.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
cursor.close();
final int dl_progress = (bytes_downloaded * 100 / bytes_total);
if (dl_progress == 100) {
myTimer.cancel();
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
mDownloadFileBtn.setText("下载完成");
mProgressBar.setProgress(dl_progress);
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
mProgressBar.setProgress(dl_progress);
mDownloadFileBtn.setText(dl_progress + "%");
}
});
}
}
}, 0, 10);
}
}
这样即使你退出程序,下次再进入仍然可以显示正在下载的进度,如果下载完成,则显示下载完成。