android使用dowanloadmanager下载东西,并且获取下载进度。

0
Android Java .NET C/C++ 17635 次浏览
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个答案

默认排序 按投票排序