借力使力不费力——文件下载篇

来源:互联网 发布:融通资产网络借贷 编辑:程序博客网 时间: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();        }    }}

}

0 0
原创粉丝点击