借力使力不费力——文件下载篇
来源:互联网 发布:融通资产网络借贷 编辑:程序博客网 时间:2024/04/28 11:53
1。Nohttp下载(如果不清楚基本使用或不了解自己解决)
package com.example.administrator.myplayerdemo.activitys;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.download.DownloadListener;
import com.download.FileDownloader;
import com.example.administrator.myplayerdemo.AppConfig;
import com.example.administrator.myplayerdemo.R;
import com.example.administrator.myplayerdemo.fileutils.AppUtils;
import com.yanzhenjie.nohttp.Headers;
import com.yanzhenjie.nohttp.Logger;
import com.yanzhenjie.nohttp.NoHttp;
import com.yanzhenjie.nohttp.download.DownloadRequest;
import com.yanzhenjie.nohttp.error.NetworkError;
import com.yanzhenjie.nohttp.error.ServerError;
import com.yanzhenjie.nohttp.error.StorageReadWriteError;
import com.yanzhenjie.nohttp.error.StorageSpaceNotEnoughError;
import com.yanzhenjie.nohttp.error.TimeoutError;
import com.yanzhenjie.nohttp.error.URLError;
import com.yanzhenjie.nohttp.error.UnKnownHostError;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.PermissionNo;
import com.yanzhenjie.permission.PermissionYes;
import java.text.DecimalFormat;
import java.util.List;
import java.util.Locale;
import io.netopen.hotbitmapgg.library.view.RingProgressBar;
/**
* Created by Administrator on 2017/3/27 0027.
* 文件下载的demo
* 注意Nohttp下载必须在真机上测试
*/
public class FileDownappDemo extends Activity implements View.OnClickListener {
private Button btn;
//private ProgressBar pb;
private RingProgressBar pd;
// private TextView tv_result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.filedemo);
btn= (Button) findViewById(R.id.btn);
btn.setOnClickListener(this);
// pb= (ProgressBar) findViewById(R.id.pb_progress);
pd= (RingProgressBar) findViewById(R.id.progress_bar_2);
// tv_result= (TextView) findViewById(R.id.tv_result);
}
public void downapp(){ checkVersion("http://api.nohttp.net/download/1.apk");}/** * 检查版本更新 * @param app_upload_url */private void checkVersion(String app_upload_url) { DownloadRequest downloadRequest = NoHttp.createDownloadRequest( app_upload_url, AppConfig.getInstance().APP_PATH_ROOT, "w.apk", true, true); NoHttp.getDownloadQueueInstance().add(0, downloadRequest, downloadListener);
} private final static String PROGRESS_KEY = “download_single_progress”;
/**
* 下载监听
*/
private com.yanzhenjie.nohttp.download.DownloadListener downloadListener = new com.yanzhenjie.nohttp.download.DownloadListener() {
@Override public void onStart(int what, boolean isResume, long beforeLength, Headers headers, long allCount) { int progress = AppConfig.getInstance().getInt(PROGRESS_KEY, 0); if (allCount != 0) { progress = (int) (beforeLength * 100 / allCount); // pb.setProgress(progress); pd.setProgress(progress); } updateProgress(progress, 0); } @Override public void onDownloadError(int what, Exception exception) { Log.i("gsc",exception.getMessage()); } @Override public void onProgress(int what, int progress, long fileCount, long speed) { updateProgress(progress, speed); pd.setProgress(progress); AppConfig.getInstance().putInt(PROGRESS_KEY, progress); } @Override public void onFinish(int what, String filePath) { Logger.d("Download finish, file path: " + filePath); } @Override public void onCancel(int what) { } private void updateProgress(int progress, long speed) { double newSpeed = speed / 1024D; DecimalFormat decimalFormat = new DecimalFormat("###0.00"); String sProgress = getString(R.string.download_progress); sProgress = String.format(Locale.getDefault(), sProgress, progress, decimalFormat.format(newSpeed)); //tv_result.setText(sProgress); }};@Overridepublic void onClick(View v) { // 先判断是否有权限。 if(AndPermission.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { // 有权限,直接do anything. downapp(); } else { // 申请权限。 AndPermission.with(this) .requestCode(100) .permission(Manifest.permission.WRITE_EXTERNAL_STORAGE) .send(); }}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { // 只需要调用这一句,第一个参数是当前Acitivity/Fragment,回调方法写在当前Activity/Framgent。 AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);}// 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionYes(100)private void getLocationYes(List<String> grantedPermissions) { // TODO 申请权限成功。 downapp();}// 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionNo(100)private void getLocationNo(List<String> deniedPermissions) { // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。 if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) { // 第一种:用默认的提示语。 //AndPermission.defaultSettingDialog(this, REQUEST_CODE_SETTING).show(); Toast.makeText(getApplicationContext(),"权限被拒绝....",Toast.LENGTH_LONG).show(); }}
}
2.Xutils 3下载
package com.example.administrator.myplayerdemo.activitys;
import android.Manifest;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.example.administrator.myplayerdemo.R;
import com.example.administrator.myplayerdemo.fileutils.AppUtils;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.PermissionNo;
import com.yanzhenjie.permission.PermissionYes;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;
import java.io.File;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.List;
import java.util.Locale;
import io.netopen.hotbitmapgg.library.view.RingProgressBar;
import is.arontibo.library.ElasticDownloadView;
/**
* Created by Administrator on 2017/3/27 0027.
*/
public class FileDownappXutilsDemo extends Activity implements View.OnClickListener {
private Button btn;
private RingProgressBar pd;
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.xuils3); btn= (Button) findViewById(R.id.btn); pd= (RingProgressBar) findViewById(R.id.progress_bar_2); btn.setOnClickListener(this);}@Overridepublic void onClick(View v) { // 先判断是否有权限。 if(AndPermission.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { // 有权限,直接do anything. dapp(); } else { // 申请权限。 AndPermission.with(this) .requestCode(100) .permission(Manifest.permission.WRITE_EXTERNAL_STORAGE) .send(); }}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { // 只需要调用这一句,第一个参数是当前Acitivity/Fragment,回调方法写在当前Activity/Framgent。 AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);}// 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionYes(100)private void getLocationYes(List<String> grantedPermissions) { // TODO 申请权限成功。 dapp();}// 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionNo(100)private void getLocationNo(List<String> deniedPermissions) { // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。 if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) { // 第一种:用默认的提示语。 //AndPermission.defaultSettingDialog(this, REQUEST_CODE_SETTING).show(); Toast.makeText(getApplicationContext(),"权限被拒绝....",Toast.LENGTH_LONG).show(); }}private void dapp() { RequestParams params = new RequestParams("http://api.nohttp.net/download/1.apk"); params.setAutoRename(true);//断点下载 params.setSaveFilePath(Environment.getExternalStorageDirectory()+"/demo.apk"); x.http().get(params, new Callback.ProgressCallback<File>() { @Override public void onSuccess(File result) { ; Log.i("xutils","onSuccess"+result.getAbsolutePath()); //pd.dismiss(); AppUtils.installapp(FileDownappXutilsDemo.this,result.getPath()); } @Override public void onError(Throwable ex, boolean isOnCallback) { Log.i("xutils","onError"); } @Override public void onCancelled(CancelledException cex) { Log.i("xutils","onCancelled"); } @Override public void onFinished() {
// pd.dismiss();
// Log.i(“xutils”,”onFinished()”);
}
@Override
public void onWaiting() {
Log.i(“xutils”,”onWaiting()”);
}
@Override
public void onStarted() {
// pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// pd.setProgressNumberFormat(“%1d b/%2d b”);
// pd.setTitle(“正在下载中..”);
// pd.setMessage(“请等待…..”);
//
// pd.show();
pd.setProgress(0);
} @Override public void onLoading(long total, long current, boolean isDownloading) { pd.setProgress((int) (current));
// ev.setMax((int)total);
pd.setMax((int)total);
DecimalFormat df2 = new DecimalFormat(“###.00”);//这样为保持2位
System.out.println(“当前大小=”+df2.format(current/1024/1024));
System.out.println(“总共大小=”+df2.format(total/1024/1024));
// float f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
// b = new BigDecimal( (float) total);
// float v = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
// pd.setProgress((int)current); } });}
}
3.OKGO下载
package com.example.administrator.myplayerdemo.activitys;
import android.Manifest;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.example.administrator.myplayerdemo.R;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.FileCallback;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.PermissionNo;
import com.yanzhenjie.permission.PermissionYes;
import java.io.File;
import java.util.List;
import io.netopen.hotbitmapgg.library.view.RingProgressBar;
import okhttp3.Call;
import okhttp3.Request;
import okhttp3.Response;
/**
* Created by Administrator on 2017/3/29 0029.
*/
public class FileDownappOKGODemo extends Activity {
private ProgressBar rb;
private RingProgressBar b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.okgo);
rb= (ProgressBar) findViewById(R.id.pb);
b= (RingProgressBar) findViewById(R.id.progress_bar_2);
}
public void downapp(View view){
// 先判断是否有权限。
if(AndPermission.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// 有权限,直接do anything.
downApp();
} else {
// 申请权限。
AndPermission.with(this)
.requestCode(100)
.permission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.send();
}
}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { // 只需要调用这一句,第一个参数是当前Acitivity/Fragment,回调方法写在当前Activity/Framgent。 AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);}// 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionYes(100)private void getLocationYes(List<String> grantedPermissions) { // TODO 申请权限成功。 downApp();}// 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionNo(100)private void getLocationNo(List<String> deniedPermissions) { // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。 if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) { // 第一种:用默认的提示语。 //AndPermission.defaultSettingDialog(this, REQUEST_CODE_SETTING).show(); Toast.makeText(getApplicationContext(),"权限被拒绝....",Toast.LENGTH_LONG).show(); }}private void downApp() { OkGo.get("http://api.nohttp.net/download/1.apk")// .tag(this)// .execute(new FileCallback() { //文件下载时,可以指定下载的文件目录和文件名 @Override public void onSuccess(File file, Call call, Response response) { // file 即为文件数据,文件保存在指定目录 String absolutePath = file.getAbsolutePath(); Log.i("gsc","下载成功!"+absolutePath); } @Override public void downloadProgress(long currentSize, long totalSize, float progress, long networkSpeed) { //这里回调下载进度(该回调在主线程,可以直接更新ui) rb.setProgress((int) currentSize); rb.setMax((int) totalSize); b.setProgress((int) currentSize); b.setMax((int) totalSize); } });}
}
FileDownloader(star 超过3000的开源项目)地址:https://github.com/gsc1234567890woshishui/FileDownloader
package com.example.administrator.myplayerdemo.activitys;
import android.Manifest;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.example.administrator.myplayerdemo.AppConfig;
import com.example.administrator.myplayerdemo.R;
import com.example.administrator.myplayerdemo.fileutils.AppUtils;
import com.liulishuo.filedownloader.BaseDownloadTask;
import com.liulishuo.filedownloader.FileDownloadListener;
import com.liulishuo.filedownloader.FileDownloader;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.FileCallback;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.PermissionNo;
import com.yanzhenjie.permission.PermissionYes;
import java.io.File;
import java.util.List;
import io.netopen.hotbitmapgg.library.view.RingProgressBar;
import okhttp3.Call;
import okhttp3.Response;
/**
* Created by Administrator on 2017/3/30 0030.
*/
public class FileDownDemo extends Activity implements View.OnClickListener {
private RingProgressBar b;private Button but,btn_stop;private BaseDownloadTask baseDownloadTask;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.filedemo); b= (RingProgressBar) findViewById(R.id.progress_bar_2); but= (Button) findViewById(R.id.btn); btn_stop= (Button) findViewById(R.id.btn_stop); btn_stop.setOnClickListener(this); but.setOnClickListener(this);} @Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { // 只需要调用这一句,第一个参数是当前Acitivity/Fragment,回调方法写在当前Activity/Framgent。 AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);}// 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionYes(100)private void getLocationYes(List<String> grantedPermissions) { // TODO 申请权限成功。 downApp();}// 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionNo(100)private void getLocationNo(List<String> deniedPermissions) { // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。 if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) { // 第一种:用默认的提示语。 //AndPermission.defaultSettingDialog(this, REQUEST_CODE_SETTING).show(); Toast.makeText(getApplicationContext(),"权限被拒绝....",Toast.LENGTH_LONG).show(); }}private void downApp() { baseDownloadTask = FileDownloader.getImpl().create("http://api.nohttp.net/download/1.apk") .setPath(Environment.getExternalStorageDirectory() + "/app.apk", false).setForceReDownload(true) .setListener(new FileDownloadListener() { @Override protected void pending(BaseDownloadTask task, int soFarBytes, int totalBytes) { } @Override protected void connected(BaseDownloadTask task, String etag, boolean isContinue, int soFarBytes, int totalBytes) { } @Override protected void progress(BaseDownloadTask task, int soFarBytes, int totalBytes) { b.setProgress(soFarBytes); b.setMax(totalBytes); } @Override protected void blockComplete(BaseDownloadTask task) { } @Override protected void retry(final BaseDownloadTask task, final Throwable ex, final int retryingTimes, final int soFarBytes) { } @Override protected void completed(BaseDownloadTask task) { Log.i("gsc", "下载完成=" + task.getPath()); AppUtils.installapp(FileDownDemo.this, task.getPath()); } @Override protected void paused(BaseDownloadTask task, int soFarBytes, int totalBytes) { } @Override protected void error(BaseDownloadTask task, Throwable e) { } @Override protected void warn(BaseDownloadTask task) { } }); baseDownloadTask.start();}@Overridepublic void onClick(View v) { if (v.getId()==R.id.btn_stop){ baseDownloadTask.pause(); } if (v.getId()==R.id.btn){ // 先判断是否有权限。 if(AndPermission.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { // 有权限,直接do anything. downApp(); } else { // 申请权限。 AndPermission.with(this) .requestCode(100) .permission(Manifest.permission.WRITE_EXTERNAL_STORAGE) .send(); } }}
}
- 借力使力不费力——文件下载篇
- 如何借力使力不费力 ,成就一番大事业
- SpringMVC—文件下载
- 文件上传和下载——文件下载
- 文件下载——DataTask
- NSURLSession下载文件—断点续传
- NSURLSession下载文件—断点续传
- GWT—《 文件导出、下载》
- 费力的项目
- 费力的可持续性
- 装系统 劳神费力
- iOS开发网络篇—文件下载(五·下载功能的封装)
- iOS开发网络篇—文件下载(五·下载功能的封装)
- Hadoop权威指南安装篇——下载安装文件
- php文件下载——断点续传下载的原理
- iOS开发网络篇—文件下载 通过block回调
- iOS开发网络篇—文件下载---进度条提示
- java类——下载文件
- VS2015 编译问题记录(更新)
- SpringMVC利用Column 注解约束double类型的精度
- 外部中断0电平触发
- 【Shiro】Apache Shiro架构之自定义realm
- cenos6 搭建 lnmp 手稿
- 借力使力不费力——文件下载篇
- 十年开发,我总结出了这12条经验
- Java 引用类型
- 今日学习笔记(3月31日)
- 串口波特率等概念
- James+java开源项目(1)
- JSP内置对象
- James+java开源项目(2)
- James+java开源项目(3)(发送接收…