上一次自己写了一个多线程断点续传下载的demo,过于麻烦,bug超多,所以我学习使用xutils来完成此功能。

先将xutils依赖搭建好(上一篇博客已经具体写了方法)

先看看效果图:

下面开始代码的逻辑:

在xutils3以前使用HttpUtils新建对象即可使用,3以后取消了HttpUtils,具体方法请看代码。

首先创建布局activity_main.xml:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity">

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" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="下载"

android:onClick="click"/>

android:id="@+id/progressBar"

style="?android:attr/progressBarStyleHorizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

然后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;

//动态获取权限

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);

//动态获取权限

verifyStoragePermissions(this);

x.view().inject(this);

et_path = findViewById(R.id.et_path);

pb = findViewById(R.id.progressBar);

}

//点击按钮下载(断点续传)

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() {

@Override

public void onWaiting() {

}

@Override

public void onStarted() {

}

@Override

public void onLoading(long total, long current, boolean isDownloading) {

//totle代表总进度,current代表当前进度

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");

}

});

}

//动态获取权限

public static void verifyStoragePermissions(Activity activity) {

try {

//检测是否有写的权限

int permission = ActivityCompat.checkSelfPermission(activity,

"android.permission.WRITE_EXTERNAL_STORAGE");

if (permission != PackageManager.PERMISSION_GRANTED) {

// 没有写的权限,去申请写的权限,会弹出对话框

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,因为下载的是一个文件,否则文件不会下载下来。

还要加上权限:

相关文章

android xutils3 jar,android xutils3 Android基于开源项目xutils3实现下载相关推荐

  1. Android消息通信之无所不能的第三方开源项目EventBus

     Android消息通信之无所不能的第三方开源项目EventBus 在Android开发中,消息通信在开发过程中是比较重要但比较略微繁琐的过程,比如,Activity与Fragment之间的消息通 ...

  2. Android x86开源项目虚拟机镜像下载(VM/Vbox)

    Android x86 开源项目可以让我们在虚拟机中直接运行Android系统,这里的x86指的是平台架构非32位版. 如果你曾经查找过VMware 虚拟机安装 Android 的教程,应该了解直接安 ...

  3. 改:如何基于开源项目做二次开发

    改:如何基于开源项目做二次开发 ‌[保持纯洁,加以包装] 当我们发现开源项目有的地方不满足我们的需求的时候,自然会有一种去改改的冲动,但是怎么改是个大学问.一种方式是投入几个人从内到外全部改一遍,将其 ...

  4. Android开源项目源码下载(不断更新中)

    原文地址:http://www.cnblogs.com/salam/archive/2010/10/26/1861779.html 最近我搜集了一些提供源码的开源项目,在这里发布出来供大家学习使用. ...

  5. android自定义视频列表,Github最火开源项目-高仿今日头条视频列表功能

    主要特点视频全屏播放和浮层小窗播放 可以完全自定义UI 能在ListView.ViewPager和ListView.ViewPager和Fragment等多重嵌套模式下全屏工作 手势修改进度和音量 视 ...

  6. 手把手教大家在自己的Windows电脑上搭建一个视频电话系统(基于开源项目FreeSwitch+Linphone)

    目前可以做视频电话的流媒体开源项目有很多,那么今天我就手把手教大家(基于FreeSwitch+Linphone)搭建一个免费的开源的能在局域网中使用的视频电话系统,部署与配置都非常的简单,而且点对点的 ...

  7. 基于开源项目kkFileView打造文件预览

    1.需求 一般管理系统都有文件上传功能,基于此一般会诞生一个需求:用户需要在线预览自己上传的文件.需求很合理,但是没那么好做,原因在于浏览器默认支持图片.pdf等少量格式预览,而实际情况是你并不能要求 ...

  8. Android acra 日志上报,基于开源项目acra实现的定制化Android crash上报库及后台系统...

    出发点: 开源的acra crash上报库( http://code.google.com/p/acra/)的缺点有: 1. crash上报到google doc里的话,由于被墙了,所以看不到数据. ...

  9. Android基于开源项目搭建自己的技术堆栈

    一.app的整体架构 从较高的层次讲,一个APP的整体架构可以分为两层,即应用层和基础框架层. 1.应用层专注于行业领域的实现,如金融.支付.地图.社交等,它直接面向用户,是用户对产品的第一层感知. ...

最新文章

  1. 怎么才能转入大数据领域 ,成为一名合格的大数据分析师...
  2. Alteral Max 10 FPGA 优点
  3. c语言判断二叉树是不是二叉排序树_C语言:数据结构-树表的查找
  4. 自定义文件系统下的磁盘访问次数计算
  5. JVM第二节:JVM 中的对象
  6. plsql 排序_在PLSQL中怎么能取到表中按ID降序排列的前十条记录???
  7. android 测试js,Android 全自动js脚本测试 Appium教程——appium环境搭建(一)
  8. eclipse 64位 免安装_超详细:64位Linux下安装PS模拟器ePSxe
  9. php dingo和jwt,Laravel5.5+dingo+JWT 开发后台 API
  10. deepin efi 启动u盘_deepin启动引导修复教程
  11. 「分布式系统之美」知乎圆桌精选大放送第二期|不要放过任何你感兴趣的话题
  12. python网易云热歌榜歌曲信息爬取(iframe框架内数据爬取,src为空)
  13. 机器学习入门系列05,Classification: Probabilistic Generative Model(分类:概率生成模型)
  14. 数据库关键字(保留字)
  15. FSM-Golang
  16. 视频教程:Java七大外企经典面试套路之基础篇
  17. 竞价排名和php是什么,竞价排名优缺点详解-金瑞帆高端建站
  18. 离散数学学习笔记——第八讲——图论基础(7.1图的基本概念和性质——4.子图和补图)
  19. 6-7 判断满足条件的三位数 (15 分)
  20. 重采样 resample

热门文章

  1. python神经网络案例——FC全连接神经网络实现mnist手写体识别
  2. Echarts数据可视化radar雷达坐标系,开发全解+完美注释
  3. zabbix--自动注册
  4. 解决 jQuery 和其他库的冲突
  5. java 复制Map对象(深拷贝与浅拷贝)
  6. JavaScript初阶(十)---------- 数组
  7. 移动滚动条显示或隐藏元素事件
  8. asp.net项目发布打包研究
  9. java 验证码的制作
  10. flex怎么设置调用的外部浏览器