android DownloadManager获取进度并显示(二)

上一篇博客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);

	}

}


这样即使你退出程序,下次再进入仍然可以显示正在下载的进度,如果下载完成,则显示下载完成。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值