正文转自:</p> <p>作者们看来数不清Android应用都具有自动更新功用,用户一键就能够达成软件的提高翻新。得益于Android系统的软件包管理和设置机制,这一意义实现起来十分轻巧,上面大家就来实行一下。首先付诸分界面效果:</p> <p><img src="http://static.oschina.net/uploads/img/201109/27081303_YIJ4.gif" alt="">p> <p><strong>1. 计划知识 在AndroidManifest.xml里界说了各种Android apk的本子标志:
p> <p>print?</p> <table> 1 <manifest xmlns:android="http: schemas.android.com="" apk="" res="" android" <="" p="">
3 | android:versionCode="1" |
当中,android:versionCode和android:versionName八个字段别离表明版别代码,版别称号。versionCode是 整型数字,versionName是字符串。由于version是给用户看的,不太轻易不小小,晋级查看时,能够以查看versionCode为主,方 便相比出版别的左右大小。 那么,在采用中哪些读取AndroidManifest.xml中的versionCode和versionName呢?能够行使PackageManager的API,参谋以下代码:
p> <p>print?</p> <table> 01 public static int getVerCode(Context context) {
05 | "com.myapp", 0).versionCode; |
07 | Log.e(TAG, e.getMessage()); |
15 | verName = context.getPackageManager().getPackageInfo( |
17 | } catch (NameNotFoundException e) { |
view source</p>
2 String verName = context.getResources()
同理,apk的利用称号能够那样得到:
p> <p>print?</p> <table> 1 public static String getAppName(Context context) {
3 | .getText(R.string.app_name).toString(); |
2. 流水生产线框架
<p font-size:medium;"="" style="overflow-wrap: break-word; margin-top: 5px; margin-bottom: 5px; color: rgb(0, 0, 0); font-family: "sans serif", tahoma, verdana, helvetica; font-size: 12px; white-space: normal;"><img src="http://static.oschina.net/uploads/img/201109/27081303_fHUr.gif" alt="">p>
[{"appname":"jtapp12","apkname":"jtapp-12-updateapksamples.apk","verName":1.0.1,"verCode":2}]
p> <p>print?</p> <table> 01 private boolean getServerVer () {
03 | String verjson = NetworkTool.getContent(Config.UPDATE_SERVER |
05 | JSONArray array = new JSONArray(verjson); |
07 | JSONObject obj = array.getJSONObject(0); |
09 | newVerCode = Integer.parseInt(obj.getString("verCode")); |
11 | } catch (Exception e) { |
17 | } catch (Exception e) { |
比较服务器和客户端的本子,并开始展览立异操作。
p> <p>print?</p> <table> 1 if (getServerVerCode()) {
3 | if (newVerCode > vercode) { |
详尽措施:
p> <p>print?</p> <table> 01 private void notNewVersionShow() {
03 | String verName = Config.getVerName(this); |
09 | sb.append(",/n已是最新版,无需更新!"); |
11 | .setMessage(sb.toString())// 设置内容 |
13 | new DialogInterface.OnClickListener() { |
15 | public void onClick(DialogInterface dialog, |
23 | private void doNewVersionUpdate() { |
25 | String verName = Config.getVerName(this); |
31 | sb.append(", 发现新版别:"); |
41 | new DialogInterface.OnClickListener() { |
43 | public void onClick(DialogInterface dialog, |
45 | pBar = new ProgressDialog(Update.this); |
47 | pBar.setMessage("请稍候..."); |
49 | downFile(Config.UPDATE_SERVER + Config.UPDATE_APKNAME); |
53 | new DialogInterface.OnClickListener() { |
注,本有的参考了先驱的相关兑现,见 </p>
> <p>print?</p> <table> <tbo< span="" style="box-sizing: inherit;">dy> 01 void downFile(final String url) {
05 | HttpClient client = new DefaultHttpClient(); |
07 | HttpResponse response; |
09 | response = client.execute(get); |
11 | long length = entity.getContentLength(); |
13 | FileOutputStream fileOutputStream = null; |
17 | Config.UPDATE_SAVENAME); |
19 | byte[] buf = new byte[1024]; |
23 | fileOutputStream.write(buf, 0, ch); |
29 | fileOutputStream.flush(); |
31 | fileOutputStream.close(); |
view source</p>
2 handler.post(new Runnable() {
view source</p>
2 Intent intent = new Intent(Intent.ACTION_VIEW);
4 | .getExternalStorageDirectory(), Config.UPDATE_SAVENAME)), |
譬如您将apk使用宣布到market上,那么,你会意识market内建了看似的模块,可以自动更新也许提示您是还是不是更新使用。那么,关于你和睦的 使用供给自动更新的话,自身内建一个是或不是更为有利了吧?本文提到的代码多数是在UpdateActivity.java中完毕,为了能够使更新进度越发友爱,能够在开始时期launcher的Activity中树立三个线程,用来查看服务端是或不是有更新。有更新的时候就运营UpdateActivity,那样 的行使体验尤其平缓。
正文例程源码查看/下载: </p> <p>版权归个人全部,转载请评释出处</p> <p></p> <p> </p>
打开App,阅读手记