设为首页 加入收藏

TOP

Android 自动更新的实现
2015-02-02 14:10:44 来源: 作者: 【 】 浏览:25
Tags:Android 自动 更新 实现

主要原理是:


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


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版本信息,进行比较


服务器端格式如下? ? 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);
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux shell 读文件按行处理 下一篇Qt自定义对象导入JavaScript脚本..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: