欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android基于開源項目xutils3實現(xiàn)下載

 更新時間:2020年11月20日 08:31:42   作者:龍谷情Sinoam  
這篇文章主要介紹了Android基于開源項目xutils3實現(xiàn)下載,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

上一次自己寫了一個多線程斷點續(xù)傳下載的demo,過于麻煩,bug超多,所以我學(xué)習(xí)使用xutils來完成此功能。

先將xutils依賴搭建好(上一篇博客已經(jīng)具體寫了方法)

先看看效果圖:

下面開始代碼的邏輯:

在xutils3以前使用HttpUtils新建對象即可使用,3以后取消了HttpUtils,具體方法請看代碼。

首先創(chuàng)建布局activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  tools:context=".MainActivity">

  <EditText
    android:id="@+id/et_path"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="請輸入下載路徑"
    android:text="http://10.173.29.234/gp.apk" />

  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="下載"
    android:onClick="click"/>

  <ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

</LinearLayout>

然后MainActivity.java:

import android.app.Activity;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;

import java.io.File;

public class MainActivity extends AppCompatActivity {

  private EditText et_path;
  private ProgressBar pb;
  //動態(tài)獲取權(quán)限
  private static final int REQUEST_EXTERNAL_STORAGE = 1;
  private static String[] PERMISSIONS_STORAGE = {
      "android.permission.READ_EXTERNAL_STORAGE",
      "android.permission.WRITE_EXTERNAL_STORAGE" };
  private String fileName;
  private String appName;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //動態(tài)獲取權(quán)限
    verifyStoragePermissions(this);

    x.view().inject(this);

    et_path = findViewById(R.id.et_path);
    pb = findViewById(R.id.progressBar);


  }

  //點擊按鈕下載(斷點續(xù)傳)
  public void click(View view) {

    //拿到路徑
    String path = et_path.getText().toString().trim();
    fileName = getFileName(path);
    RequestParams params = new RequestParams(path);
    params.setSaveFilePath(fileName);
    params.setAutoRename(true);
    x.http().get(params, new Callback.ProgressCallback<File>() {

      @Override
      public void onWaiting() {

      }

      @Override
      public void onStarted() {

      }

      @Override
      public void onLoading(long total, long current, boolean isDownloading) {
        //totle代表總進度,current代表當(dāng)前進度
        pb.setMax((int) total);
        pb.setProgress((int) current);
        System.out.println("測試1");

      }


      @Override
      public void onSuccess(File result) {
        System.out.println("下載完成");
        Toast.makeText(getApplicationContext(), "下載成功", Toast.LENGTH_SHORT).show();

      }

      @Override
      public void onError(Throwable ex, boolean isOnCallback) {
        System.out.println("測試2");

      }

      @Override
      public void onCancelled(CancelledException cex) {
        System.out.println("測試3");

      }

      @Override
      public void onFinished() {
        System.out.println("測試4");

      }
    });


  }
  //動態(tài)獲取權(quán)限
  public static void verifyStoragePermissions(Activity activity) {

    try {
      //檢測是否有寫的權(quán)限
      int permission = ActivityCompat.checkSelfPermission(activity,
          "android.permission.WRITE_EXTERNAL_STORAGE");
      if (permission != PackageManager.PERMISSION_GRANTED) {
        // 沒有寫的權(quán)限,去申請寫的權(quán)限,會彈出對話框
        ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  //獲取文件名-->"http://10.173.29.234/test.exe"
  public String getFileName(String path) {
    int start = path.lastIndexOf("/") + 1;
    appName = path.substring(start);
//    String fileName = Environment.getExternalStorageDirectory().getPath()+"/"+subString;
    String fileName = "/sdcard/file/"+ appName;
    return fileName;

  }
}

第53行注意x.http().get(params, new Callback.ProgressCallback<File>(){};<>中要寫File,因為下載的是一個文件,否則文件不會下載下來。

還要加上權(quán)限:

<uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論