(https://alissl.ucdl.pp.uc.cn/fs08/2019/07/05/1/110_17e4089aa3a4b819b08069681a9de74b.apk)
public class AppOkHttpDownload01 extends AppCompatActivity implements View.OnClickListener {
private ProgressBar mProgDownload;
/**
* 下载
*/
private Button mButDownload;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app_ok_http_download01);
context = getApplicationContext();
initView();
}
private void initView() {
mProgDownload = (ProgressBar) findViewById(R.id.prog_download);
mButDownload = (Button) findViewById(R.id.but_download);
mButDownload.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.but_download:
Executors.newCachedThreadPool().execute(new Runnable() {
@Override
public void run() {
try {
OkHttpClient client = new OkHttpClient.Builder().build();
Request request = new Request.Builder()
.url("https://alissl.ucdl.pp.uc.cn/fs08/2019/07/05/1/110_17e4089aa3a4b819b08069681a9de74b.apk")
.get()
.build();
Call call = client.newCall(request);
Response response = call.execute();
//获取下载的内容输入流
ResponseBody body = response.body();
InputStream inputStream = body.byteStream();
final long lengh = body.contentLength();
System.out.println("文件大小" + lengh);
// 文件保存到本地
File file1 = Environment.getExternalStorageDirectory();
File file = new File(file1, "xxxx123.apk");
FileOutputStream outputStream = new FileOutputStream(file);
int lien = 0;
int losing = 0;
byte[] bytes = new byte[1024];
while ((lien = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, lien);
losing += lien;
final float i = losing * 1.0f / lengh;
System.out.println("下载进度" + i);
runOnUiThread(new Runnable() {
@Override
public void run() {
int ii = (int) (i * 100);
mProgDownload.setProgress(ii);
}
});
//使用rxjava切换线程
// // UpdateAppearanceProgress(i);
}
outputStream.flush();
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
break;
}
}
private void UpdateAppearanceProgress(final float i) {
Observable.just(i)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Float>() {
@Override
public void accept(Float aFloat) throws Exception {
int ii = (int) (aFloat * 100);
mProgDownload.setProgress(ii);
}
});
}
}
网友评论