DownloadManager下载文件


package com.gst.user.application;

import android.app.DownloadManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class DownloadFileActivity extends AppCompatActivity implements View.OnClickListener{


    Button button_start_download;
    Button button_cancel_download;
    Button button_view_history;
    Button button_query_state;

    DownloadManager mDownloadManager;
    long mDownloadReference;
    String mDownloadUri;

    DownloadCompleteReceiver mDownloadCompleteReceiver;
    private String Tag="DownloadFileActivity";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_download_file);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        mDownloadManager=(DownloadManager)getSystemService(DOWNLOAD_SERVICE);
        button_start_download=(Button)findViewById(R.id.button_start_download);
        button_cancel_download=(Button)findViewById(R.id.button_cancel_download);
        button_view_history=(Button)findViewById(R.id.button_view_history);
        button_query_state=(Button)findViewById(R.id.button_query_state);

        mDownloadUri="http://img31.ddimg.cn/71/7/23043311-1_w.jpg";

        mDownloadCompleteReceiver=new DownloadCompleteReceiver();
        registerReceiver(mDownloadCompleteReceiver,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

        button_start_download.setOnClickListener(this);
        button_cancel_download.setOnClickListener(this);
        button_view_history.setOnClickListener(this);
        button_query_state.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int id=v.getId();
        switch (id){
            case R.id.button_start_download:
                Uri uri=Uri.parse(mDownloadUri);
                DownloadManager.Request request=new DownloadManager.Request(uri);
                request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
                request.setTitle("下载图像");
                request.setDescription("只想静静地下载...");
                request.setDestinationInExternalFilesDir(getApplicationContext(), "/sdcard/images", "download_image.jpg");
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);
                mDownloadReference=mDownloadManager.enqueue(request);
                setTitle("正在下载图像...");
                break;
            case R.id.button_cancel_download:
                mDownloadManager.remove(mDownloadReference);
                break;
            case R.id.button_view_history:
                Intent intent=new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS);
                startActivity(intent);
                break;
            case R.id.button_query_state:
                DownloadManager.Query query=new DownloadManager.Query();
                query.setFilterById(mDownloadReference);
                Cursor cursor=mDownloadManager.query(query);
                if (cursor.moveToFirst()){
                    checkstate(cursor);
                }
                break;
            default:
                break;
        }

    }

    private void checkstate(Cursor cursor) {
        int columnIndex=cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
        int status=cursor.getInt(columnIndex);
        int columnReason = cursor.getColumnIndex(DownloadManager.COLUMN_REASON);
        int reason = cursor.getInt(columnReason);

        int filenameIndex = cursor
                .getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME);
        String filename = cursor.getString(filenameIndex);

        String statusText = "";
        String reasonText = "";
        switch (status)
        {
            case DownloadManager.STATUS_FAILED:
                statusText = "STATUS_FAILED";
                switch (reason)
                {
                    case DownloadManager.ERROR_CANNOT_RESUME:
                        reasonText = "ERROR_CANNOT_RESUME";
                        break;
                    case DownloadManager.ERROR_DEVICE_NOT_FOUND:
                        reasonText = "ERROR_DEVICE_NOT_FOUND";
                        break;
                    case DownloadManager.ERROR_FILE_ALREADY_EXISTS:
                        reasonText = "ERROR_FILE_ALREADY_EXISTS";
                        break;
                    case DownloadManager.ERROR_FILE_ERROR:
                        reasonText = "ERROR_FILE_ERROR";
                        break;
                    case DownloadManager.ERROR_HTTP_DATA_ERROR:
                        reasonText = "ERROR_HTTP_DATA_ERROR";
                        break;
                    case DownloadManager.ERROR_INSUFFICIENT_SPACE:
                        reasonText = "ERROR_INSUFFICIENT_SPACE";
                        break;
                    case DownloadManager.ERROR_TOO_MANY_REDIRECTS:
                        reasonText = "ERROR_TOO_MANY_REDIRECTS";
                        break;
                    case DownloadManager.ERROR_UNHANDLED_HTTP_CODE:
                        reasonText = "ERROR_UNHANDLED_HTTP_CODE";
                        break;
                    case DownloadManager.ERROR_UNKNOWN:
                        reasonText = "ERROR_UNKNOWN";
                        break;
                }
                break;
            case DownloadManager.STATUS_PAUSED:
                statusText = "STATUS_PAUSED";
                switch (reason)
                {
                    case DownloadManager.PAUSED_QUEUED_FOR_WIFI:
                        reasonText = "PAUSED_QUEUED_FOR_WIFI";
                        break;
                    case DownloadManager.PAUSED_UNKNOWN:
                        reasonText = "PAUSED_UNKNOWN";
                        break;
                    case DownloadManager.PAUSED_WAITING_FOR_NETWORK:
                        reasonText = "PAUSED_WAITING_FOR_NETWORK";
                        break;
                    case DownloadManager.PAUSED_WAITING_TO_RETRY:
                        reasonText = "PAUSED_WAITING_TO_RETRY";
                        break;
                }
                break;
            case DownloadManager.STATUS_PENDING:
                statusText = "STATUS_PENDING";
                break;
            case DownloadManager.STATUS_RUNNING:
                statusText = "STATUS_RUNNING";
                break;
            case DownloadManager.STATUS_SUCCESSFUL:
                statusText = "STATUS_SUCCESSFUL";
                reasonText = "Filename:\n" + filename;
                break;
        }

        Toast.makeText(this, statusText + "\n" + reasonText,
                Toast.LENGTH_LONG).show();
    }

    private class DownloadCompleteReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
                if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(intent.getAction())){
                long reference=intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID,-1);
                if (reference==mDownloadReference){
                    Toast.makeText(DownloadFileActivity.this,"文件下载完成.",Toast.LENGTH_SHORT).show();
                    setTitle("下载完成");
                }
                Log.d(Tag,reference+":"+mDownloadReference);

            }
        }
    }

    @Override
    protected void onDestroy() {
        if (mDownloadCompleteReceiver!=null){
            unregisterReceiver(mDownloadCompleteReceiver);
        }
        super.onDestroy();
    }
}

2.布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_download_file"
    tools:context="com.gst.user.application.DownloadFileActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="下载文件"
        android:id="@+id/button_start_download"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="36dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="取消下载"
        android:id="@+id/button_cancel_download"
        android:layout_below="@+id/button_start_download"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="41dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="显示下载历史"
        android:id="@+id/button_view_history"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="查询下载状态"
        android:id="@+id/button_query_state"
        android:layout_below="@+id/button_view_history"
        android:layout_alignLeft="@+id/button_view_history"
        android:layout_alignStart="@+id/button_view_history"
        android:layout_marginTop="50dp" />
</RelativeLayout>


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值