zoukankan      html  css  js  c++  java
  • android 更新实现自己主动

    其主要原理是:

    在应用程序启动。取server在版本 ,

    以下这个是获取当前应用的版本号信息

    private void getCurVersion() {
            try {
                PackageInfo pInfo = context.getPackageManager().getPackageInfo(
                        context.getPackageName(), 0);
                curVersion = pInfo.versionName;
                curVersionCode = pInfo.versionCode;
            } catch (NameNotFoundException e) {
                Log.e("update", e.getMessage());
                curVersion = "1.0.1";
                curVersionCode = 1;
            }
    
        }

    以下则是通过java net包来get版本号信息。进行比較

    server端格式例如以下     version_1.0.2

    HttpURLConnection 获取输入流。再用

    BufferedReader 缓冲流。readline成String。再比較

    private boolean check_update(){
    		String getstring = null;
    		String version=null;
    		getCurVersion();
    		try {
    			
    			URL myurl=new URL(app_check);
    			
    			HttpURLConnection urlconnection=(HttpURLConnection) myurl.openConnection();
    			urlconnection.setReadTimeout(50000);
    			urlconnection.setConnectTimeout(50000);
    			urlconnection.connect();
    			InputStream in=urlconnection.getInputStream();
    			
    			   BufferedReader buffread;
    			   buffread=new BufferedReader(new InputStreamReader(in,"utf-8"));
    			   String line;
    				line=buffread.readLine();
    				while(line!=null){
    					getstring+=line;
    					line=buffread.readLine();
    					
    				}
    				int index=getstring.indexOf("version_");
    				//2.0.1
    				version=getstring.substring(index+8, index+13);
    				in.close();
    				Log.e("version",version);
    		} catch (MalformedURLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	    if(version!=null){
    		if(version.compareTo(curVersion)>0)
    			return true;
    		else
    			return false;
    	    }
    	    else
    	    	return false;
    	}

    接下来则是弹出一对话框以及调用下载线程

    private void showdownDialog(){
    		 AlertDialog.Builder dialog = new AlertDialog.Builder(context);  
    	        dialog.setTitle("软件版本号更新");  
    	        dialog.setMessage("有最新的app更新");  
    	       dialog.setNegativeButton("以后再说", new OnClickListener(){
    
    			@Override
    			public void onClick(DialogInterface arg0, int arg1) {
    				// TODO Auto-generated method stub
    				arg0.dismiss();
    			}
    	       
    	       });
    	       dialog.setPositiveButton("确定", new OnClickListener(){
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				//确定里面调用下载线程,同一时候显示下载的那个进度对话框
    				dialog.dismiss();
    				cancel=true;
    				downapk();
    				showDownapk();
    			}
    	    	   
    	       });
    	       dialog.show();
    	}

    最后则是发出一个Intent广播

    private void setInstall(){
    File apkfile = new File(apk_path);  
           if (!apkfile.exists()) {  
               return;  
           }      
           Intent i = new Intent(Intent.ACTION_VIEW);  
           i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");   
           context.startActivity(i); 
    }

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    传参存在潜在危险值
    JWT Json Web Token
    异步编程初探:async和await
    异步 async/Await C#
    React+ES6+Dva(roadHog,Webpabk,Babel)+AntDesign 技术栈相关学习文档
    iOS App 内跳转到手机系统设置页面
    h5(WKWebView)和iOS之间的交互问题
    iOS 10需要设置的隐私权限
    iOS APP开发设置启动图片 Launch Image
    iOS开发中常用的手势---边缘手势
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4632260.html
Copyright © 2011-2022 走看看