public class MainActivity extends Activity {
private DownloadManager downloadManager;
private long mDownloadReference;//当前下载任务的引用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
downloadManager = (DownloadManager) getSystemService(Activity.DOWNLOAD_SERVICE);
//注册监听下载完成的广播
IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
DownLoadCompleteReceiver completeReceiver = new DownLoadCompleteReceiver();
registerReceiver(completeReceiver, filter);
}
@SuppressLint("NewApi")
public void onclick(View view){
switch(view.getId()){
//下载文件
case R.id.btn_down:
Uri uri = Uri.parse("http://img31.ddimg.cn/71/7/23043311-1_w.jpg");
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI);
request.setTitle("下载图像");
request.setDescription("正在使用下载图像");
request.setDestinationInExternalFilesDir(this, "test/images", "download_image.jpg");
mDownloadReference = downloadManager.enqueue(request);//加入下载队列
setTitle("正在下载图像...");
break;
//取消下载
case R.id.btn_cancel:
downloadManager.remove(mDownloadReference);
break;
//查看下载历史
case R.id.btn_history:
startActivity(new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS));
break;
//查看下载状态
case R.id.btn_status:
Query query = new Query();
query.setFilterById(mDownloadReference);//设置查询的条件
Cursor cursor = downloadManager.query(query);
if(cursor.moveToFirst()){
checkStatus(cursor);
}
break;
}
}
//查询下载状态
@SuppressLint("InlinedApi")
private void checkStatus(Cursor cursor){
//获取下载状态的代码
int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
//获取下载原因的代码
int reason = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_REASON));
//获取下载文件存储在本地的文件名
for(int i=0;i<cursor.getColumnCount();i++)
System.out.println(cursor.getColumnName(i));
String filename = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
System.out.println(filename);
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://排队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://正在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 arg0, Intent intent) {
if(intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)){
long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if(referenceId == mDownloadReference){
setTitle("图像下载完成");
}
}
}
}
}
private DownloadManager downloadManager;
private long mDownloadReference;//当前下载任务的引用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
downloadManager = (DownloadManager) getSystemService(Activity.DOWNLOAD_SERVICE);
//注册监听下载完成的广播
IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
DownLoadCompleteReceiver completeReceiver = new DownLoadCompleteReceiver();
registerReceiver(completeReceiver, filter);
}
@SuppressLint("NewApi")
public void onclick(View view){
switch(view.getId()){
//下载文件
case R.id.btn_down:
Uri uri = Uri.parse("http://img31.ddimg.cn/71/7/23043311-1_w.jpg");
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI);
request.setTitle("下载图像");
request.setDescription("正在使用下载图像");
request.setDestinationInExternalFilesDir(this, "test/images", "download_image.jpg");
mDownloadReference = downloadManager.enqueue(request);//加入下载队列
setTitle("正在下载图像...");
break;
//取消下载
case R.id.btn_cancel:
downloadManager.remove(mDownloadReference);
break;
//查看下载历史
case R.id.btn_history:
startActivity(new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS));
break;
//查看下载状态
case R.id.btn_status:
Query query = new Query();
query.setFilterById(mDownloadReference);//设置查询的条件
Cursor cursor = downloadManager.query(query);
if(cursor.moveToFirst()){
checkStatus(cursor);
}
break;
}
}
//查询下载状态
@SuppressLint("InlinedApi")
private void checkStatus(Cursor cursor){
//获取下载状态的代码
int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
//获取下载原因的代码
int reason = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_REASON));
//获取下载文件存储在本地的文件名
for(int i=0;i<cursor.getColumnCount();i++)
System.out.println(cursor.getColumnName(i));
String filename = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
System.out.println(filename);
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://排队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://正在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 arg0, Intent intent) {
if(intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)){
long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if(referenceId == mDownloadReference){
setTitle("图像下载完成");
}
}
}
}
}