其主要原理是:

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

}

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

android 更新实现自己主动的更多相关文章

  1. Cocos2d-x3.1下 Android,APK自己主动升级

    项目要做Android的自己主动升级,对于我们之前做iOS的转Cocos开发做Android方面的功能..... 不正确说了.这里记录下我的实现过程. 原文地址:http://blog.csdn.ne ...

  2. Android 更新UI的两个方法

    Android 更新UI的两个方法 在Android的开发过程中,常常需要适时的更新UI.Androd中的UI是在主线程中更新的.如果在主线程之外的线程中直接更新,就会出现报错并抛出异常: andro ...

  3. 【Android】Eclipse自己主动编译NDK/JNI的三种方法

    [Android]Eclipse自己主动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 一.Eclipse关联cy ...

  4. Android 更新UI的几种方式

    1.Activity的 runOnUiThread textView = (TextView) findViewById( R.id.tv ); new Thread(new Runnable() { ...

  5. 我的Android最佳实践之—— Android更新UI的两种方法:handler与runOnUiThread()

    在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外的线程中直接更新页面 显示常会报错.抛出异常:android.view.ViewRoo ...

  6. 转:探讨android更新UI的几种方法

    本文转自:http://www.cnblogs.com/wenjiang/p/3180324.html 作为IT新手,总以为只要有时间,有精力,什么东西都能做出来.这种念头我也有过,但很快就熄灭了,因 ...

  7. Android更新UI的两种方法——handler与runOnUiThread()

    在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外的线程中直接更新页面 显示常会报错.抛出异常:android.view.ViewRoo ...

  8. Android更新UI的几种方式

    之前做过一个Android采集心电图数据的程序,那才是真正的多线程,之前写的小程序:比如下载个文件,从socket接受大一点的数据流然后在ui上更新进度,我都感觉这就叫做多线程了,其实这啥都不算,用个 ...

  9. 【转】探讨android更新UI的几种方法----不错

    原文网址:http://www.cnblogs.com/wenjiang/p/3180324.html 作为IT新手,总以为只要有时间,有精力,什么东西都能做出来.这种念头我也有过,但很快就熄灭了,因 ...

随机推荐

  1. vb.net版机房收费——助你学会七层架构(一)

    我自己写机房的时候,看非常多高人的博客,各种的借鉴,当初务必的纠结,如今整个机房敲完了,写这篇博客给大家一个总体上的.简单理解的七层,期望大家看完这篇文章之后,不会这个纠结了. 首先大家得看了我的上一 ...

  2. 怎样在屏幕上显示多个alv

    本文解说怎样在屏幕上显示多个alv. 实现这种需求关键是下面几点(举例:在屏幕上显示4个alv): 1.须要定义4个alv control 2.由于有4个alv control,于是就须要定义4个容器 ...

  3. 《JavaScript设计模式与开发实践》读书笔记之策略模式

    1.策略模式 定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换 1.1 传统实现 根据工资基数和年底绩效来发送年终奖 var calculateBonus= function (perfo ...

  4. uva:10700 - Camel trading(贪婪)

    题目:10700 - Camel trading 题目大意:给出一些表达式,表达式由数字和加号乘号组成,数字范围[1,20].这些表达式可能缺少了括号,问这种表达式加上括号后能得到的最大值和最小值. ...

  5. UVALive 3890 Most Distant Point from the Sea(凸包最大内接园)

    一个n个点的凸多边形,求多边形中离多边形边界最远的距离.实际上就是求凸包最大内接圆的半径. 利用半平面交求解,每次二分枚举半径d,然后将凸包每条边所代表的半平面沿其垂直单位法向量平移d,看所有平移后的 ...

  6. C经典之14-双向链表存储1-10---ShinePans

    #include <stdio.h> #include <conio.h> #include <stdlib.h> //system(); 这个指令须要用到此头文件 ...

  7. 【原创】leetCodeOj --- Binary Tree Right Side View 解题报告

    二连水 题目地址: https://leetcode.com/problems/binary-tree-right-side-view/ 题目内容: Given a binary tree, imag ...

  8. HDU1163 Eddy&#39;s digital Roots【九剩余定理】

    Eddy's digital Roots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  9. Fitnesse用系列三

    动态决策表 动态决策表是新出,版本号到今年年初还没有了.我看了看文档和演示文稿样本,其效果是作为一种辅助通用决策表.它不是easy匹配的名称和发射.但假设只有一个或两个参数.不管名字怎么都找不到,这并 ...

  10. C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。

    原文:C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从[网路图片].[Assets资源].[UI]修改锁定画面. 一般我们在开发Windows ...