這篇文章主要介紹了Android如何實(shí)現(xiàn)簡(jiǎn)單斷點(diǎn)續(xù)傳和下載到本地功能,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷策劃、小程序制作、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動(dòng)互聯(lián)開(kāi)發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十多年以來(lái),已經(jīng)為1000+成都發(fā)電機(jī)租賃各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的1000+客戶與我們一路同行,見(jiàn)證我們的成長(zhǎng);未來(lái),我們一起分享成功的喜悅。
具體內(nèi)容如下
效果展示
導(dǎo)入依賴與權(quán)限
依賴
compile 'com.loopj.android:android-async-http:1.4.9'
權(quán)限
主MainActivity(布局)
主MainActivity
public class MainActivity extends AppCompatActivity { protected static final String TAG = "OtherActivity"; //下載線程的數(shù)量 private final static int threadsize = 3; protected static final int SET_MAX = 0; public static final int UPDATE_VIEW = 1; private ProgressBar pb; private Button bt_download; private Button bt_pause; private TextView tv_info; //顯示進(jìn)度和更新進(jìn)度 private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case SET_MAX://設(shè)置進(jìn)度條的最大值 int filelength = msg.arg1; pb.setMax(filelength); break; case UPDATE_VIEW://更新進(jìn)度條 和 下載的比率 int len = msg.arg1;//新下載的長(zhǎng)度 pb.setProgress(pb.getProgress() + len);//設(shè)置進(jìn)度條的刻度 int max = pb.getMax();//獲取進(jìn)度的最大值 int progress = pb.getProgress();//獲取已經(jīng)下載的數(shù)據(jù)量 // 下載:30 總:100 int result = (progress * 100) / max; tv_info.setText("下載:" + result + "%"); break; default: break; } } ; }; String uri = "http://c.hiphotos.baidu.com/image/pic/item/b90e7bec54e736d1e51217c292504fc2d46269f3.jpg"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找到控件 pb = (ProgressBar) findViewById(R.id.pb); tv_info = (TextView) findViewById(R.id.tv_info); bt_download = (Button) findViewById(R.id.bt_download); bt_pause = (Button) findViewById(R.id.bt_pause); //數(shù)據(jù)的回顯 //確定下載的文件 String name = getFileName(uri); File file = new File(Environment.getExternalStorageDirectory(), name); if (file.exists()) {//文件存在回顯 //獲取文件的大小 int filelength = (int) file.length(); pb.setMax(filelength); try { //統(tǒng)計(jì)原來(lái)所有的下載量 int count = 0; //讀取下載記錄文件 for (int threadid = 0; threadid < threadsize; threadid++) { //獲取原來(lái)指定線程的下載記錄 int existDownloadLength = readDownloadInfo(threadid); count = count + existDownloadLength; } //設(shè)置進(jìn)度條的刻度 pb.setProgress(count); //計(jì)算比率 int result = (count * 100) / filelength; tv_info.setText("下載:" + result + "%"); } catch (Exception e) { e.printStackTrace(); } } } //暫停 private boolean flag = false;//是否在下載 public void pause(View v){ flag = false; bt_download.setEnabled(true); bt_pause.setEnabled(false); } //下載 public void download(View v){ flag = true; //是在下載 bt_download.setEnabled(false);//一點(diǎn)擊變成不可點(diǎn)擊 bt_pause.setEnabled(true);//一點(diǎn)擊變成可點(diǎn)擊 new Thread(){//子線程 public void run() { try { //獲取服務(wù)器上文件的大小 HttpClient client = new DefaultHttpClient(); HttpHead request = new HttpHead(uri); HttpResponse response = client.execute(request); //response 只有響應(yīng)頭 沒(méi)有響應(yīng)體 if(response.getStatusLine().getStatusCode() == 200){ Header[] headers = response.getHeaders("Content-Length"); String value = headers[0].getValue(); //文件大小 int filelength = Integer.parseInt(value); Log.i(TAG, "filelength:"+filelength); //設(shè)置進(jìn)度條的最大值 Message msg_setmax = Message.obtain(mHandler, SET_MAX, filelength, 0); msg_setmax.sendToTarget(); //處理下載記錄文件 for(int threadid=0;threadid感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Android如何實(shí)現(xiàn)簡(jiǎn)單斷點(diǎn)續(xù)傳和下載到本地功能”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
網(wǎng)頁(yè)題目:Android如何實(shí)現(xiàn)簡(jiǎn)單斷點(diǎn)續(xù)傳和下載到本地功能
本文鏈接:http://weahome.cn/article/igpsch.html