DownloadManager下载文件

来源:互联网 发布:数据库系统分为哪几种 编辑:程序博客网 时间:2024/06/10 11:54
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>


0 0
原创粉丝点击