博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 更新实现自己主动
阅读量:6705 次
发布时间:2019-06-25

本文共 2719 字,大约阅读时间需要 9 分钟。

其主要原理是:

在应用程序启动,取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); 
}

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

你可能感兴趣的文章
Docker run 命令的使用方法
查看>>
Medium 内部使用 css/less 的代码风格指南
查看>>
解析网络附加存储NAS在安防等行业中应用
查看>>
聊一聊负载均衡SLB的DDoS防护
查看>>
互联网金融正在告别“颠覆者”角色
查看>>
如何缓解Microsoft XML漏洞带来的风险?
查看>>
阿里云启动地震AI大赛:挑战余震震源捕捉
查看>>
中国人工智能学会通讯——构建强健的人工智能:原因及方式 3. 优化对风险敏感的目标...
查看>>
走近比特币:一个故事看懂“区块链”
查看>>
在这里 创新是最默契的表达
查看>>
IDC:第三季度全球HPC服务器收入增长3.9%
查看>>
eclipse中spring访问mysql的简易实现
查看>>
深入DellWorld2015:SC9000存储软硬件更新解密
查看>>
分析:“AI on Hadoop”有意义吗?
查看>>
Logstash详解之——output模块
查看>>
大数据将如何改变农业
查看>>
Docker Hub 最受欢迎的10大镜像
查看>>
ssh_scan:远程验证你SSH服务的配置和策略
查看>>
不懂技术的人不要对懂技术的人说这很容易实现
查看>>
为什么我要写自己的框架?
查看>>