Android 使用 DowanloadManager 實現(xiàn)下載并獲取下載進(jìn)度實例代碼
Android 使用 DowanloadManager 實現(xiàn)下載并獲取下載進(jìn)度實例代碼
實現(xiàn)代碼:
package com.koolsee.gallery;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.View.OnTouchListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.koolsee.gallery.adapter.RecommendAdapter;
import com.koolsee.gallery.model.Recommend;
import com.koolsee.gallery.widget.GalleryFlow;
/**
* 首頁
*
* @author zengxiaotao
*/
public class testActivity extends Activity {
private DownloadManager dowanloadmanager = null;
private DownloadChangeObserver downloadObserver;
private long lastDownloadId = 0;
public static final Uri CONTENT_URI = Uri.parse("content://downloads/my_downloads");
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
String serviceString = Context.DOWNLOAD_SERVICE;
dowanloadmanager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
Uri uri = Uri.parse("http://commonsware.com/misc/test.mp4");
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS).mkdir();
lastDownloadId = dowanloadmanager.enqueue(new DownloadManager.Request(uri)
.setAllowedNetworkTypes(
DownloadManager.Request.NETWORK_MOBILE
| DownloadManager.Request.NETWORK_WIFI)
.setAllowedOverRoaming(false)
.setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS, "test.mp4"));
registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
downloadObserver = new DownloadChangeObserver(null);
getContentResolver().registerContentObserver(CONTENT_URI, true, downloadObserver);
}
class DownloadChangeObserver extends ContentObserver {
public DownloadChangeObserver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
@Override
public void onChange(boolean selfChange) {
queryDownloadStatus();
}
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//這里可以取得下載的id,這樣就可以知道哪個文件下載完成了。適用與多個下載任務(wù)的監(jiān)聽
Log.v("tag", "" + intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0));
queryDownloadStatus();
}
};
private void queryDownloadStatus() {
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(lastDownloadId);
Cursor c = dowanloadmanager.query(query);
if(c != null && c.moveToFirst()) {
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
int reasonIdx = c.getColumnIndex(DownloadManager.COLUMN_REASON);
int titleIdx = c.getColumnIndex(DownloadManager.COLUMN_TITLE);
int fileSizeIdx =
c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES);
int bytesDLIdx =
c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR);
String title = c.getString(titleIdx);
int fileSize = c.getInt(fileSizeIdx);
int bytesDL = c.getInt(bytesDLIdx);
// Translate the pause reason to friendly text.
int reason = c.getInt(reasonIdx);
StringBuilder sb = new StringBuilder();
sb.append(title).append("\n");
sb.append("Downloaded ").append(bytesDL).append(" / " ).append(fileSize);
// Display the status
Log.d("tag", sb.toString());
switch(status) {
case DownloadManager.STATUS_PAUSED:
Log.v("tag", "STATUS_PAUSED");
case DownloadManager.STATUS_PENDING:
Log.v("tag", "STATUS_PENDING");
case DownloadManager.STATUS_RUNNING:
// 正在下載,不做任何事情
Log.v("tag", "STATUS_RUNNING");
break;
case DownloadManager.STATUS_SUCCESSFUL:
// 完成
Log.v("tag", "下載完成");
// dowanloadmanager.remove(lastDownloadId);
break;
case DownloadManager.STATUS_FAILED:
// 清除已下載的內(nèi)容,重新下載
Log.v("tag", "STATUS_FAILED");
dowanloadmanager.remove(lastDownloadId);
break;
}
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(receiver);
getContentResolver().unregisterContentObserver(downloadObserver);
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- android中DownloadManager實現(xiàn)版本更新,監(jiān)聽下載進(jìn)度實例
- Android中使用AsyncTask做下載進(jìn)度條實例代碼
- Android Retrofit文件下載進(jìn)度顯示問題的解決方法
- Android實現(xiàn)Service下載文件,Notification顯示下載進(jìn)度的示例
- Android之ProgressBar即時顯示下載進(jìn)度詳解
- Android實現(xiàn)文件下載進(jìn)度顯示功能
- Android文件下載進(jìn)度條的實現(xiàn)代碼
- Android下載進(jìn)度監(jiān)聽和通知的處理詳解
相關(guān)文章
FlowLayout流式布局實現(xiàn)搜索清空歷史記錄
這篇文章主要為大家詳細(xì)介紹了FlowLayout流式布局實現(xiàn)搜索清空歷史記錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12
Retrofit和OkHttp如何實現(xiàn)Android網(wǎng)絡(luò)緩存
這篇文章主要介紹了Retrofit和OkHttp如何實現(xiàn)Android網(wǎng)絡(luò)緩存,幫助大家更好的理解和學(xué)習(xí)Android開發(fā),感興趣的朋友可以了解下2021-02-02
android開發(fā)教程之framework增加字符串資源和圖片等resource資源
這篇文章主要介紹了android開發(fā)中framework增加字符串資源和圖片等resource資源方法,需要的朋友可以參考下2014-02-02
Android?實現(xiàn)自定義圓形進(jìn)度條的三種常用方法
這篇文章主要介紹了Android?實現(xiàn)自定義圓形進(jìn)度條的三種常用方法的相關(guān)資料,需要的朋友可以參考下2023-03-03
Android官方下拉刷新控件SwipeRefreshLayout使用詳解
這篇文章主要為大家詳細(xì)介紹了Android官方下拉刷新控件SwipeRefreshLayout使用方法,實例展示如何使用下拉刷新控件,感興趣的小伙伴們可以參考一下2016-07-07
Android自定義View實現(xiàn)豎向滑動回彈效果
這篇文章主要為大家詳細(xì)介紹了Android自定義View實現(xiàn)滑動回彈效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
Android 中CheckBox多項選擇當(dāng)前的position信息提交的示例代碼
這篇文章主要介紹了Android 中CheckBox多項選擇當(dāng)前的position信息提交的示例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-07-07

