让代码更简单

安卓下载服务器文件到手机

重要:本文最后更新于2018-11-13 13:47:21,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

这几天更新的文章都是与安卓程序更新有关的,昨天讲了使用ProgressDialog来呈现安卓程序更新时的UI交互,今天来实现下载的具体过程。

先说说本文实现的效果,将网络文件,例如:http://117.177.249.153/rpcs.myapp.com/myapp/rcps/d/1000017149/com.tencent.mtt_1000017149_170221201645a.apk这是腾讯的QQ浏览器文件,官方的。下载至本地文件夹daimadogdown中,并以下载地址中的com.tencent.mtt_1000017149_170221201645a.apk为文件名。再加上昨天的ProgressDialog对话框进行UI交互,子线程与主线程(UI线程)交互使用handler。

实现代码如下:

复制
public class MainActivity extends AppCompatActivity {
private Button bt1;
    private Button qr;
    Dialog dailog;
    ProgressDialog pd;
    Handler handler;
    String path="http://117.177.249.153/rpcs.myapp.com/myapp/rcps/d/1000017149/com.tencent.mtt_1000017149_170221201645a.apk";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt1= (Button) findViewById(R.id.button);
        handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                if (msg.what==1){
pd.setProgress(msg.arg1);
                }else if (msg.what==0){
                    pd.dismiss();
                }
            }
        };
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
showpress();
                new Thread(){
                    @Override
                    public void run() {
                       HttpURLConnection connt=null;
                        FileOutputStream fos=null;
                        InputStream in=null;
                        File file=null;
                        try {
                            URL url = new URL(path);
                            connt = (HttpURLConnection) url.openConnection();
                            connt .setRequestProperty("Accept-Encoding", "identity");
                            connt.setRequestMethod("GET");
                            int wenjiancd=connt.getContentLength();
                            int code = connt.getResponseCode();
                            if (code == 200) {
                                file = new File(Environment.getExternalStorageDirectory(), "/daimadogdown/"+getfilename());
                                if (!file.exists()) {
                                    if (!file.getParentFile().exists()) {
                                        file.getParentFile().mkdirs();
                                    }
                                    file.createNewFile();
                                }
                                fos = new FileOutputStream(file);
                                in = connt.getInputStream();
                                int len = -1;
                                int jdcd=0;
                                System.out.println(wenjiancd);
                                byte[] b = new byte[1024];
                                while ((len = in.read(b)) != -1) {
                                    jdcd+=len;
                                    Message msg=Message.obtain();
                                    System.out.println((int)((float)jdcd/wenjiancd*100));
                                    msg.arg1=(int)((float)jdcd/wenjiancd*100);
                                    msg.what=1;
                                    handler.sendMessage(msg);
                                    fos.write(b, 0, len);
                                }
                                fos.flush();
                                handler.sendEmptyMessage(0);
                            }
                        }catch (IOException e){
                            e.printStackTrace();
                        }finally {
                            try{
                            if (fos!=null)fos.close();
                                if (in!=null)in.close();
                                if (connt!=null)connt.disconnect();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }

                    }
                }.start();
            }
        });
    }
    //获取文件名
private String getfilename(){
int sata=path.lastIndexOf("/");
    return path.substring(sata+1);
}
    //进度对话框
    private  void showpress(){
        pd=new ProgressDialog(MainActivity.this);
        pd.setTitle("下载更新");
        pd.setMessage("下载中,请稍后....");
        pd.setCancelable(false);
        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        pd.setMax(100);
        pd.show();
    }
}

效果如下图所示:

 

感觉很棒!可以赞赏支持我哟~

0 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐