android 更新实现自己主动

时间:2023-03-09 16:45:37
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); 

}

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