软件安装下载【Android】

功能描述:

1.下载远程服务器端的apk文件

2.同步显示下载进度

3.下载完成自动安装

       软件安装下载【Android】_第1张图片        软件安装下载【Android】_第2张图片      软件安装下载【Android】_第3张图片         软件安装下载【Android】_第4张图片


关键技术点:

1.sd卡文件读写

2.ProgressDialog的使用

3.分线程请求网络

4.安装apk

主要分为三个步骤:

1.主线程,显示提示视图:ProgressDialog

2.启动分线程,请求下载apk文件,下载过程中显示下载进度

3.主线程,移除dialog,启动安装

首先将要安装的apk进行打包,并将其放在一个先建的web工程下,然后写一个布局文件,只需要有一个简单的按钮即可,可在按钮上设置监听事件,按着上面的步骤进行操作

第一步:

1.显示提示视图:ProgressDialog其为水平进度

2.准备用于保存APK文件的File对象

第二步: 

1.启动分线程,请求下载apk文件,下载过程中显示下载进度

2.使用HTTPUrlConnection得到请求连接对象,设置,连接,得到请求响应码

3.设置Dialog的最大进度

4.得到包含apk文件数据的InputStream

5.创建指向apkFile的FileoutputStream

6.边读边写,显示进度下载,休息一会

7.关闭流,关闭连接

第三步: 

1.移除dialog

2.启动安装

设置保存文件的File对象

 private File apkFile;

button的点击事件

public void download (View v) {
        //1.主线程,显示提示视图:ProgressDialog
        final ProgressDialog dialog = new ProgressDialog(this);
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.show();

        //准备用于保存APK文件的File对象
        apkFile = new File(getExternalFilesDir(null),"net.apk");
        //2.启动分线程,请求下载APK文件,下载过程中显示下载进度
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //得到连接对象
                    String path = "http://192.168.51.5:8080/web_server/app-release.apk";
                    URL url = new URL(path);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    //设置
                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(10000);
                    connection.setConnectTimeout(5000);
                    //连接
                    connection.connect();
                    //请求并得到响应码200
                    int responseCode = connection.getResponseCode();
                    if (responseCode==200) {
                        //设置Dialog的最大进度
                        dialog.setMax(connection.getContentLength());
                        //得到包含APK文件数据的InputStream
                        InputStream is = connection.getInputStream();
                        //创建指向apkFile的FileoutputStream
                        FileOutputStream fos = new FileOutputStream(apkFile);
                        //边读边写
                        byte [] buffer = new byte[1024];
                        int len =-1;
                        while ((len=is.read(buffer))!=-1) {
                            fos.write(buffer,0,len);
                            //显示进度下载
                            dialog.incrementProgressBy(len);
                            //休息一会(模拟网速慢)
//                            Thread.sleep(50);
                            SystemClock.sleep(50);//与上面相比这个不需要抛异常
                        }
                        fos.close();
                        is.close();

                    }
                    //下载完成
                    connection.disconnect();
                    //3.主线程,移除dialog,启动安装
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            dialog.dismiss();
                            install();
                        }
                    });
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
启动下载

 private void install() {
        Intent intent = new Intent("android.intent.action.INSTALL_PACKAGE");
        intent.setDataAndType(Uri.fromFile(apkFile),"application/vnd.android.package-archive");
        startActivity(intent);
    }

权限设置,主要需要两个权限,联网权限和保存文件在sd时的权限


    


你可能感兴趣的:(android)