Android 自动更新 教你如何写自己的更新



  在这个极速开发,快速迭代的年代里,APP的更新自然也成为日常开发中不可或缺的一部分,一直站在我们身后的友盟也要在9月份停止自动更新了 SO,如何写出一个优雅的更新效果,让自己的APP增新不少呢?下面带大家来一起写一个APP更新的功能.


  其实这个功能很简单,,,,就是一个文件上传下载的功能 文件的地址就是放在你们服务器上面的路径,你请求后台的版本号和本地的版本号进行对比,如果比服务器上的低就调用,然后下载的下来的地方是你设置的路径,然后调用系统的安装功能就Ok


github : https://github.com/mirsfang/UpdateApk








//下载的主要方法

    private Runnable mdownApkRunnable = new Runnable() {
        @Override
        public void run() {
            try {
                File file = new File(savePath);
                if (!file.exists()) {
                    file.mkdirs();
                }
                String apkFile = saveFileName;
                File ApkFile = new File(apkFile);
                FileOutputStream fos = new FileOutputStream(ApkFile);
                
                URL url = new URL(apkUrl);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.connect();
                apkLength = conn.getContentLength();
                System.out.println();
                InputStream is = conn.getInputStream();
                apkCurrentDownload = 0;
                byte buf[] = new byte[1024];
                int length = -1 ;
                while((length = is.read(buf))!=-1){
                	 apkCurrentDownload += length;
                     progress = (int) (((float) apkCurrentDownload / apkLength) * 100);
                     //更新进度   
                     mHandler.sendEmptyMessage(DOWN_UPDATE);
                     fos.write(buf, 0, length);
                     if (apkCurrentDownload == apkLength) {
                         //下载完成通知安装   
                         mHandler.sendEmptyMessage(DOWN_OVER);
                         break;
                     }
                     if(interceptFlag ){
                    	 ApkFile.delete();
                    	 break;
                     }
                }
                fos.close();
                is.close();
            }catch (IOException e) {
                e.printStackTrace();
            }

        }
    };


  上面可以看到,就是使用HttpUrlConnection 来下载自己的APK  通过Handler通知进度更新

然后下载好apk之后调用系统的安装功能

 /**
     * 安装apk
     *
     * @param
     */
    private void installApk() {
        File apkfile = new File(saveFileName);
        if (!apkfile.exists()) {
            return;
        }
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
        mContext.startActivity(i);
        try {
            if (downloadDialog!=null&&downloadDialog.isShowing())
            downloadDialog.dismiss();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

然后APK 就自动安装了  核心功能就这么两点,


然后我们再用 RoundCornerProgressBar  来对下载的进度条进行美化,一个漂亮的进度条就诞生了  。。。  就是这么EASY   Are you  OK?


可扩展 但是没来得及写    如果是root的话静默安装   检测是否是WIFI环境 ,安装之后删除APK等 有兴趣的可以补上去。。


还有 谁能告诉我  为什么我的截图这么大

   








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值