Aandroid 3.2 加入了DownloadManager ,这里举例使用方法。

layout添加两个个button,两个txtview

<?xml version="1.0" encoding="utf-8"?> <LinearLayout     xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     >     <Button         android:id="@+id/start"         android:text="Start Download"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:onClick="startDownload"     />     <Button         android:id="@+id/query"         android:text="Query Status"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:onClick="queryDownloadStatus"      />     <Button         android:id="@+id/del"         android:text="del download"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:onClick="delDownloads"      />       <TextView  android:id="@+id/tvsize"         android:text="file"     android:layout_width="wrap_content"     android:layout_height="wrap_content" />     <TextView  android:id="@+id/tvinfo"         android:text="file"     android:layout_width="wrap_content"     android:layout_height="wrap_content" /> </LinearLayout> 

package com.download;   import android.app.Activity; import android.app.DownloadManager; import android.app.DownloadManager.Request; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.TextView; import android.widget.Toast;  public class DWManagerThread extends Activity {      private DownloadManager mgr=null;     private long lastDownload=-1L;           TextView tvdwsize ;          TextView tvdwinfo=null;      private String strUrl="http://dl.google.com/android/ndk/android-ndk-r6-linux-x86.tar.bz2";     public static final int MSG_DWPACKSIZE=1;     public static final int MSG_DWSIZE=2;      Handler handler= new Handler(){     public void handleMessage (Message msg) {        // bar.incrementProgressBy(5);         switch(msg.what){                 case MSG_DWPACKSIZE:                     String  size=String.valueOf(msg.arg1);                       tvdwinfo.setText(size);                      Log.d("handleMessage", "dwpacksize="+size);                     break;                 case MSG_DWSIZE:                     String dwsize=String.valueOf(msg.arg1);                     tvdwsize.setText(dwsize);                      Log.d("handleMessage", "dwsize="+dwsize);                     break;                 default:                     break;         }     } };      @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);            tvdwsize=(TextView)findViewById(R.id.tvsize);          tvdwinfo=(TextView)findViewById(R.id.tvinfo);          mgr=(DownloadManager)getSystemService(DOWNLOAD_SERVICE);      }       public void startDownload(View v) {         Uri uri=Uri.parse(strUrl);          Environment             .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)             .mkdirs();          Request dwreq=new DownloadManager.Request(uri);          dwreq.setTitle("Demo");         dwreq.setDescription("android-ndk-r6-linux-x86.tar.bz2");
//把文件存放在 sdcard中的根目录   dpath设置为null 下载到cache
 Uri dpath= Uri.fromFile(new File("/mnt/sdcard"+"/crane_evb_v13-ota-20120717.zip"));                        dwreq.setDestinationUri(dpath);
       //要下载到指定目录不能要这句
//dwreq.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,"android-ndk-r6-linux-x86.tar.bz2"); //dwreq.setDestinationInExternalFilesDir(this, "system", "crane_evb_v13-ota-20120717.zip");     
  dwreq.setNotificationVisibility(0);         dwreq.setShowRunningNotification(true);          lastDownload=mgr.enqueue(dwreq);        }   public void queryDownloadStatus(View v)  {        Runnable queryRunable = new Runnable() {           long totalsize=0;           long dowsize=0;           boolean downok=false;           Cursor c=null;          public void run() {             //查询下载文件总大小          c=mgr.query(new DownloadManager.Query().setFilterById(lastDownload));          c.moveToFirst();            totalsize=c.getLong(c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));              Message msg_packsize=new Message();             msg_packsize.what=MSG_DWPACKSIZE;             msg_packsize.arg1=(int) totalsize;             handler.sendMessage (msg_packsize);              while(downok==false){                          c=mgr.query(new DownloadManager.Query().setFilterById(lastDownload));                          if (c==null) {                             //tvdwsize.setText("query=null");                         }                         else {                             c.moveToFirst();                             //查询已经下载的大小                             dowsize=c.getLong(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));                             if(totalsize==dowsize) downok=true;                         }                          Message msg=new Message();                         msg.what=MSG_DWSIZE;                         msg.arg1=(int) dowsize;                         handler.sendMessage (msg);                          try {                             Thread.sleep(5000);                         } catch (InterruptedException e) {                             // TODO Auto-generated catch block                             e.printStackTrace();                         }                         c.close();                 }             }//run         };             Thread background = new Thread(queryRunable);            background.start(); }      public void delDownloads(View view) {          Toast.makeText(this, "delDownloads", Toast.LENGTH_LONG).show();         mgr.remove(lastDownload);      } //查看下载窗口    public void viewDownWindow(View v) {         startActivity(new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS));     }   } 

权限:

    <uses-permission android:name="android.permission.INTERNET" />      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>      <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />

本文出自 “lhc180” 博客,请务必保留此出处http://lhc180.blog.51cto.com/316940/762122

更多相关文章

  1. Android(安卓)常用命令
  2. Android介绍如何生成keystore 文件并使用
  3. Android实现签名涂鸦手写板
  4. Android(安卓)Device Monitor 报 open failed: Permission denie
  5. Arcgis for Android(安卓)开发环境配置(Android(安卓)Studio篇)
  6. 从android模拟器中提取文件系统
  7. Android(安卓)getResources的作用和须要注意点
  8. Android中运行Tensorflow程序2-编写自己的程序
  9. android 权限注解库

随机推荐

  1. Android(安卓)进程间通信:AIDL
  2. Android(安卓)内存溢出解决方案(OOM) 整理
  3. android:shape的使用
  4. Android(安卓)NDK STL
  5. android 回车键事件编程
  6. Android(安卓)消息提示框:五种Toast详解
  7. Windows下获取Android系统源码
  8. Android的NDK开发
  9. WebView---Android与js交互实例
  10. android与js的交互