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);
}
};
@Override
public 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();
}
}
@Override
public 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;
@Override
protected 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);
}
@Override
public 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();
}
}
@Override
public 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();
}
}
@Override
public 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;
@Override
protected 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);
}
@Override
public 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();
}
@Override
public 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();
}
}
}
}