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>