• 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); 
    }

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

  • 相关阅读:
    常用变量的获取
    批出里中常用参数的含义
    利用批处理命令复制指定文件到指定目录下
    跟后台打印程序系统服务通讯时出现错误。请打开服务管理单元,确认后台打印程序服务是否在运行。
    系统日志报错i8042prt无法加载
    删除指定路径下指定天数之前(以文件名中包含的日期字符串为准)的文件:字符串截取
    删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件:BAT + VBS
    Linux学习笔记
    Docker
    Python学习笔记
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4647490.html
Copyright © 2020-2023  润新知