版本更新

<span style="font-family: Arial, Helvetica, sans-serif;">请求比对信息    </span>
private void reguestAPKData() {
        new Thread() {
            @Override
            public void run() {
                try {
                    URL url = new URL("请求apk的地址路径");
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setConnectTimeout(5000);
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    InputStream is = conn.getInputStream();
                    byte[] buffer = new byte[1024];
                    int len = -1;
                    while ((len = is.read(buffer)) != -1) {
                        baos.write(buffer, 0, len);
                    }
                    Message message = handler.obtainMessage();
                    message.obj = baos.toString();
                    handler.sendMessage(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
       发送给handler进行解析
	Handler handler = new Handler(){
		public void handleMessage(android.os.Message msg) {
			 String xml = (String) msg.obj;
	         jiexiApkData(xml);
		};
	};
	    private void panduanUpdate(){
	        try {
	            PackageManager packageManager = getPackageManager();
	            PackageInfo packInfo = packageManager.getPackageInfo(this.getPackageName(), 0);
	            String versionName = packInfo.versionName;
	            if(!versionName.equals(update.getVersionName())){
	                initAlert();
	            }
	        } catch (PackageManager.NameNotFoundException e) {
	            e.printStackTrace();
	        }
	    }
	 private void jiexiApkData(String xml){
	        try {
	            XmlPullParser newPullParser = Xml.newPullParser();
	            ByteArrayInputStream bais = new ByteArrayInputStream(xml.getBytes());
	            newPullParser.setInput(bais, "utf-8");
	            int eventType = newPullParser.getEventType();
	            while (eventType != XmlPullParser.END_DOCUMENT) {
	                String name = newPullParser.getName();
	                switch (eventType) {
	                    case XmlPullParser.START_TAG:
	                        if ("android".equals(name)) {
	                            update = new Update();
	                        } else if ("versionCode".equals(name)) {
	                            update.setVersionCode(newPullParser.nextText());
	                        } else if ("versionName".equals(name)) {
	                            update.setVersionName(newPullParser.nextText());
	                        } else if ("downloadUrl".equals(name)) {
	                            update.setDownloadUrl(newPullParser.nextText());
	                        } else if ("updateLog".equals(name)) {
	                            update.setUpdateLog(newPullParser.nextText());
	                        }
	                        break;
	                }
	                eventType = newPullParser.next();
	            }
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	        //判断更新
	        panduanUpdate();
	    }

	    private void panduanUpdate(){
	        try {
	            PackageManager packageManager = getPackageManager();
	            PackageInfo packInfo = packageManager.getPackageInfo(this.getPackageName(), 0);
	            String versionName = packInfo.versionName;
	            if(!versionName.equals(update.getVersionName())){
	                initAlert();
	            }
	        } catch (PackageManager.NameNotFoundException e) {
	            e.printStackTrace();
	        }
	    }





	    private void initAlert(){
	        try {
	            AlertDialog.Builder builder = new AlertDialog.Builder(this);
	            builder.setTitle("软件版本更新");
	            builder.setMessage(update.getUpdateLog());
	            builder.setPositiveButton("立即更新", new DialogInterface.OnClickListener() {
	                        @Override
	                        public void onClick(DialogInterface dialog, int which) {
	                            //点击立即下载更新包
	                            downLoadApk();
	                        }
	            });
	            builder.setNegativeButton("以后再说", null);

	            AlertDialog alertDialog = builder.create();
	            alertDialog.show();
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	    }
兴建一个类写到里面    
public static File getFileFromServer(String path, ProgressDialog pd) throws Exception{


        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

            URL url = new URL(path);

            HttpURLConnection conn =  (HttpURLConnection) url.openConnection();

            conn.setConnectTimeout(5000);



            pd.setMax(conn.getContentLength());

            InputStream is = conn.getInputStream();

            File file = new File(Environment.getExternalStorageDirectory(), "updata.apk");

            FileOutputStream fos = new FileOutputStream(file);

            BufferedInputStream bis = new BufferedInputStream(is);

            byte[] buffer = new byte[1024];

            int len ;

            int total=0;

            while((len =bis.read(buffer))!=-1){

                fos.write(buffer, 0, len);

                total+= len;

 

                pd.setProgress(total);

            }

            fos.close();

            bis.close();

            is.close();

            return file;

        }

        else{

            return null;

        }

    }

</pre>上面新建一个类<p></p><p></p><p></p><p></p><p></p><pre name="code" class="java"> protected void downLoadApk() {

	        final ProgressDialog pd;    //进度条对话框

	        pd = new  ProgressDialog(this);

	        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

	        pd.setMessage("正在下载更新");

	        pd.show();
	        //进行下载操作
	        new Thread(){

	            @Override

	            public void run() {

	                try {
	                    //下载
	                    File file = DownLoadManager.getFileFromServer(update.getDownloadUrl(), pd);

	                    sleep(3000);
	                    //安装
	                    installApk(file);

	                    pd.dismiss(); //结束掉进度条对话框

	                } catch (Exception e) {

	                }

	            }}.start();
	    }
	    protected void installApk(File file) {

	        Intent intent = new Intent();

	        //执行动作

	        intent.setAction(Intent.ACTION_VIEW);

	        //执行的数据类型

	        intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");

	        startActivity(intent);

	    }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值