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