关于软件更新的问题,简单的说一下。
首先软件更新需要判断是否需要更新。如果需要更新,需要获取更新的链接。我们可以把这个看成一个简单的系统。需要客户端请求和服务端相应。 为了简单起见我们将服务端就只放一个简单的XML文件,XML文件包含了最新的客户端版本号(这里尽量采用版本号,因为版本号是Int型的便于比较)和最新版APK的下载地址。
12 2 3http://www.youdoman.com/apk.apk 4
这样简单的服务器端就可以了。
客户端只需要读取此xml,并通过sax解析。然后获取客户端的版本号跟从网络中读取的最新版本号做比较,如果客户端的版本号跟服务器端的版本号不同则需要更新,调用系统Intent下载更新APK即可。
1 //获取软件系统版本号 2 public class AppStatus { 3 protected static int getAppVersionId(Context ctx) { 4 try { 5 return ctx.getPackageManager().getPackageInfo(ctx.getPackageName(),0).versionCode; 6 } catch (NameNotFoundException e) { 7 // TODO Auto-generated catch block 8 return -1; 9 } 10 } 11 }
有的时候,我们可能需要获取手机系统的一些数据,用来选择相应的更新数据或者统计一些数据。获取的数据越多,也就越利于我们给用户提供更准确的更新选择。
1 public class PhoneStatus { 2 //获取手机的IMEI号 3 protected String getImei(Context ctx){ 4 TelephonyManager telephonyManager=(TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE); 5 return telephonyManager.getDeviceId(); 6 } 7 //获得手机型号 8 protected String getModel(Context ctx) { 9 return android.os.Build.MODEL; 10 } 11 //获得系统固件版本 12 protected String getTarget(Context ctx) { 13 return android.os.Build.VERSION.RELEASE; 14 } 15 //获得系统固件版本号 16 protected String getSDK(Context ctx) { 17 return android.os.Build.VERSION.SDK; 18 } 19 }
拿到了这些数据我们只要交给服务器,服务器可以通过详细信息判断来决定返回的数据信息。 拿到新版本apk的url后就可以通过系统Intent来下载安装APK。