打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
android开发(23)使用DownloadManager下载文件--代码
package example.downloaddemo;
import java.io.File;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.DownloadManager;
import android.app.DownloadManager.Query;
import android.app.DownloadManager.Request;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;
/**
 * @author yunfei
 *
 */
public class MainActivity extends Activity {
    private static final String TAG = "PDWY";
    // an ID for the download, unique across the system. This ID is used to make
    // future calls related to this download.
    long mDownloadId;
    DownloadManager downloadManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 过SystemService 以获取 DownloadManager
        downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
    }
    @Override
    protected void onPause() {
        stopQuery();
        this.unregisterReceiver(receiver);
        super.onPause();
    }
    @Override
    protected void onResume() {
        IntentFilter filter = new IntentFilter(
                DownloadManager.ACTION_DOWNLOAD_COMPLETE);
        this.registerReceiver(receiver, filter);
        IntentFilter filter22 = new IntentFilter(
                DownloadManager.ACTION_NOTIFICATION_CLICKED);
        this.registerReceiver(receiver2, filter22);
        startQuery(mDownloadId);
        super.onResume();
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    public void lookDownload() {
        startActivity(new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS));
    }
    public void onClick(View view) {
        int id = view.getId();
        if (id == R.id.start) {
            Request request = new Request(
                    Uri.parse("http://192.168.3.123:8080/androidautoupdate/apks/2.zip"));
            request.setAllowedNetworkTypes(
                    DownloadManager.Request.NETWORK_MOBILE
                            | DownloadManager.Request.NETWORK_WIFI)
                    .setAllowedOverRoaming(false) // 缺省是true
                    .setTitle("更新") // 用于信息查看
                    .setDescription("下载apk") // 用于信息查看
                    .setDestinationInExternalPublicDir(
                            Environment.DIRECTORY_DOWNLOADS, "2.zip");
            mDownloadId = downloadManager.enqueue(request); // 加入下载队列
            startQuery(mDownloadId);
        }
        if (id == R.id.stop) {
            stopQuery();
            removeDownload(mDownloadId);
        }
        if (id == R.id.look) {
            lookDownload();
        }
    }
    private int removeDownload(long downloadId) {
        return downloadManager.remove(downloadId);
    }
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
        }
    };
    int step = 1000;
    QueryRunnable runnable = new QueryRunnable();
    class QueryRunnable implements Runnable {
        public long DownID;
        @Override
        public void run() {
            queryState(DownID);
            handler.postDelayed(runnable, step);
        }
    };
    private void startQuery(long downloadId) {
        if (downloadId != 0) {
            runnable.DownID = downloadId;
            handler.postDelayed(runnable, step);
        }
    };
    private void stopQuery() {
        handler.removeCallbacks(runnable);
    }
    private void queryState(long downID) {
        // 关键:通过ID向下载管理查询下载情况,返回一个cursor
        Cursor c = downloadManager.query(new DownloadManager.Query()
                .setFilterById(downID));
        if (c == null) {
            Toast.makeText(this, "Download not found!", Toast.LENGTH_LONG)
                    .show();
        } else { // 以下是从游标中进行信息提取
            if(!c.moveToFirst()){
                c.close();
                return;
            }
            Log.d(TAG,
                    "Column_id : "
                            + c.getLong(c
                                    .getColumnIndex(DownloadManager.COLUMN_ID)));
            Log.d(TAG,
                    "Column_bytes_downloaded so far : "
                            + c.getLong(c
                                    .getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)));
            Log.d(TAG,
                    "Column last modified timestamp : "
                            + c.getLong(c
                                    .getColumnIndex(DownloadManager.COLUMN_LAST_MODIFIED_TIMESTAMP)));
            Log.d(TAG,
                    "Column local uri : "
                            + c.getString(c
                                    .getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)));
            Log.d(TAG,
                    "Column statue : "
                            + c.getInt(c
                                    .getColumnIndex(DownloadManager.COLUMN_STATUS)));
            Log.d(TAG,
                    "Column reason : "
                            + c.getInt(c
                                    .getColumnIndex(DownloadManager.COLUMN_REASON)));
            int st = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
            Toast.makeText(this, statusMessage(st), Toast.LENGTH_LONG).show();
            //Log.i(TAG, statusMessage(st));
             
            c.close();
        }
    }
    private String statusMessage(int st) {
        switch (st) {
        case DownloadManager.STATUS_FAILED:
            return "Download failed";
        case DownloadManager.STATUS_PAUSED:
            return "Download paused";
        case DownloadManager.STATUS_PENDING:
            return "Download pending";
        case DownloadManager.STATUS_RUNNING:
            return "Download in progress!";
        case DownloadManager.STATUS_SUCCESSFUL:
            return "Download finished";
        default:
            return "Unknown Information";
        }
    }
    // 监听下载结束,启用BroadcastReceiver
    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
            String action = intent.getAction();
            if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
                long downloadId = intent.getLongExtra(
                        DownloadManager.EXTRA_DOWNLOAD_ID, 0);
                // 查询
                Query query = new Query();
                query.setFilterById(downloadId);
                Cursor c = dm.query(query);
                if (c.moveToFirst()) {
                    int columnIndex = c
                            .getColumnIndex(DownloadManager.COLUMN_STATUS);
                    if (DownloadManager.STATUS_SUCCESSFUL == c
                            .getInt(columnIndex)) {
                        String uriString = c
                                .getString(c
                                        .getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
                        //removeDownload(downloadId);
                        Toast.makeText(MainActivity.this,
                                "get file complete: " + uriString, 0).show();
                        // Uri.parse(uriString);
                    }
                }// endif
            }// endif
        }// onReceive
    };// end class receiver
    // 监听下载结束,启用BroadcastReceiver
    BroadcastReceiver receiver2 = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            long downloadId = intent.getLongExtra(
                    DownloadManager.EXTRA_DOWNLOAD_ID, 0);
            String action = intent.getAction();
            if (DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(action)) {
                lookDownload();
            }
        }
    };//
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
男人精心布局三年,定能令人刮目相看
有效向上社交,向下兼容?请教高手,价值交换
中国网络作家潘长宏谈养生-15
歇后语故事:56.《武松绣花:当勇猛遇上细腻》
小柴胡汤所治病症颇广,且看陈老精妙解析
高其佩:杂画十二开
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服