Android:Okhttp文件下载

效果图:

        

权限:配置文件

<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();
                }
            }
        });

    }
发布了71 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39131246/article/details/101462391
今日推荐