效果图:
权限:配置文件
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在代码动态的申请权限即可
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.doGet:
doGet(url);
break;
case R.id.btn_downloadFile:
if (Build.VERSION.SDK_INT >= 23) {
int REQUEST_CODE_CONTACT = 101;
String[] permissions = {
Manifest.permission.WRITE_EXTERNAL_STORAGE};
//验证是否许可权限
for (String str : permissions) {
if (MainActivity.this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
//申请权限
MainActivity.this.requestPermissions(permissions, REQUEST_CODE_CONTACT);
return;
} else {
downloadFile();
}
}
}
downloadFile();
break;
}
}
/**
* 下载文件
*/
public void downloadFile()
{
Executors.newCachedThreadPool().execute(new Runnable() {
@Override
public void run() {
try {
OkHttpClient client =new OkHttpClient.Builder().build();
Request request = new Request.Builder().url("http://vfx.mtime.cn/Video/2016/07/24/mp4/160724154733643806.mp4")
.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 file = Environment.getExternalStorageDirectory();
File file1 = new File(file,"下载视频.mp4");
FileOutputStream outputStream = new FileOutputStream(file1);
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 li =(int) (i*100);
mProgressBar.setProgress(li);
}
});
}
outputStream.flush();
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}