Android 使用 DowanloadManager 实现下载并获取下载进度实例代码

实现代码:

package com.koolsee.gallery; import java.util.ArrayList;import java.util.List;import java.util.Timer;import java.util.TimerTask; import android.app.Activity;import android.app.DownloadManager;import android.app.DownloadManager.Request;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.util.Log;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.View;import android.view.View.OnKeyListener;import android.view.View.OnTouchListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemSelectedListener;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView; import com.koolsee.gallery.adapter.RecommendAdapter;import com.koolsee.gallery.model.Recommend;import com.koolsee.gallery.widget.GalleryFlow; /** * 首页 * * @author zengxiaotao */public class testActivity extends Activity { private DownloadManager dowanloadmanager = null; private DownloadChangeObserver downloadObserver; private long lastDownloadId = 0; public static final Uri CONTENT_URI = Uri.parse("content://downloads/my_downloads"); @Override protected void onCreate(Bundle savedInstanceState) {  // TODO Auto-generated method stub  super.onCreate(savedInstanceState);  setContentView(R.layout.test);  String serviceString = Context.DOWNLOAD_SERVICE;  dowanloadmanager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);   Uri uri = Uri.parse("http://commonsware.com/misc/test.mp4");  Environment.getExternalStoragePublicDirectory(   Environment.DIRECTORY_DOWNLOADS).mkdir();   lastDownloadId = dowanloadmanager.enqueue(new DownloadManager.Request(uri)           .setAllowedNetworkTypes(            DownloadManager.Request.NETWORK_MOBILE            | DownloadManager.Request.NETWORK_WIFI)           .setAllowedOverRoaming(false)           .setDestinationInExternalPublicDir(            Environment.DIRECTORY_DOWNLOADS, "test.mp4"));  registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));  downloadObserver = new DownloadChangeObserver(null);  getContentResolver().registerContentObserver(CONTENT_URI, true, downloadObserver); } class DownloadChangeObserver extends ContentObserver {   public DownloadChangeObserver(Handler handler) {   super(handler);   // TODO Auto-generated constructor stub  }   @Override  public void onChange(boolean selfChange) {   queryDownloadStatus();  } }   private BroadcastReceiver receiver = new BroadcastReceiver() {  @Override  public void onReceive(Context context, Intent intent) {   //这里可以取得下载的id,这样就可以知道哪个文件下载完成了。适用与多个下载任务的监听   Log.v("tag", "" + intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0));   queryDownloadStatus();  } };  private void queryDownloadStatus() {  DownloadManager.Query query = new DownloadManager.Query();  query.setFilterById(lastDownloadId);  Cursor c = dowanloadmanager.query(query);  if(c != null && c.moveToFirst()) {   int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));    int reasonIdx = c.getColumnIndex(DownloadManager.COLUMN_REASON);   int titleIdx = c.getColumnIndex(DownloadManager.COLUMN_TITLE);   int fileSizeIdx =    c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES);   int bytesDLIdx =    c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR);   String title = c.getString(titleIdx);   int fileSize = c.getInt(fileSizeIdx);   int bytesDL = c.getInt(bytesDLIdx);    // Translate the pause reason to friendly text.   int reason = c.getInt(reasonIdx);   StringBuilder sb = new StringBuilder();   sb.append(title).append("\n");   sb.append("Downloaded ").append(bytesDL).append(" / " ).append(fileSize);    // Display the status   Log.d("tag", sb.toString());   switch(status) {   case DownloadManager.STATUS_PAUSED:    Log.v("tag", "STATUS_PAUSED");   case DownloadManager.STATUS_PENDING:    Log.v("tag", "STATUS_PENDING");   case DownloadManager.STATUS_RUNNING:    // 正在下载,不做任何事情    Log.v("tag", "STATUS_RUNNING");    break;   case DownloadManager.STATUS_SUCCESSFUL:    // 完成    Log.v("tag", "下载完成");    // dowanloadmanager.remove(lastDownloadId);    break;   case DownloadManager.STATUS_FAILED:    // 清除已下载的内容,重新下载    Log.v("tag", "STATUS_FAILED");    dowanloadmanager.remove(lastDownloadId);    break;   }  } }  @Override protected void onDestroy() {  // TODO Auto-generated method stub  super.onDestroy();  unregisterReceiver(receiver);  getContentResolver().unregisterContentObserver(downloadObserver); }}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多相关文章

  1. Android Design: 九种常见Activity及代码解析之"Login Activity"
  2. [CSDN]Android应用程序进程启动过程的源代码分析
  3. Android开源项目源代码分享
  4. 如何用代码区分android TV和手机? 适配Android TV ?
  5. java Android 算一定业务规定的工作日(除去法定节假日、调休周末
  6. Anroid源代码编译相关资源
  7. Android使用supportv7包实现网易云音乐首页titlebar
  8. 第一行代码Android学习(十)

随机推荐

  1. apply google map api
  2. Android高版本收不到静态注册的广播
  3. Android(安卓)动画效果
  4. 简单适配器加载列表
  5. Dalvik 文档 【记录】
  6. android打开网页,使用手机浏览器
  7. XmlSerializer 短信备份
  8. 如何使用Android(安卓)MediaStore裁剪大
  9. Android(安卓)Handler leak 分析及解决办
  10. Android应用程序生命周期