標籤:android c style class blog code
主要原理是:
在應用啟動的時候,去取伺服器上版本號碼 ,與當前應用的對比如果有更新則下載
下面這個是擷取當前應用的版本資訊
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.1version=getstring.substring(index+8, index+13);in.close();Log.e("version",version);} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} if(version!=null){if(version.compareTo(curVersion)>0)return true;elsereturn false; } else return false;}
接下來則是彈出一對話方塊以及調用下載線程
private void showdownDialog(){ AlertDialog.Builder dialog = new AlertDialog.Builder(context); dialog.setTitle("軟體版本更新"); dialog.setMessage("有最新的app更新"); dialog.setNegativeButton("以後再說", new OnClickListener(){@Overridepublic void onClick(DialogInterface arg0, int arg1) {// TODO Auto-generated method stubarg0.dismiss();} }); dialog.setPositiveButton("確定", new OnClickListener(){@Overridepublic 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);
}