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;
- handleMessage()*/
- 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");
- dwreq.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,"android-ndk-r6-linux-x86.tar.bz2");
- 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() {
- //查询下载文件总大小
- 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));
- }
- }