为您的问题找到了一个很好的解决方案:
假设您想在应用启动时手动检查版本更新,并通知您的用户有新的更新。
第 1 步:Download android-market-api(不是 .jar 文件,是完整的项目!)
第 2 步:将其导入 eclipse 后,在您的活动中写入以下代码:
MarketService ms = new MarketService(activity);
ms.level(MarketService.REVISION).checkVersion();
现在,我们需要修改MarketService.java,因为它好像坏了。
第三步:重写回调方法并添加以下方法
protected void callback(String url, JSONObject jo, AjaxStatus status){
if(jo == null) return;
String googlePlayversion = jo.optString("version", "0");
String smartphone_version = "";
PackageInfo pInfo;
try {
pInfo = act.getPackageManager().getPackageInfo(act.getPackageName(), 0);
smartphone_version = pInfo.versionName;
} catch (NameNotFoundException e) {}
boolean new_version_avaible = compare(smartphone_version, googlePlayversion);
if(new_version_avaible){
showUpdateDialog(jo);
}
}
private static boolean compare(String v1, String v2) {
String s1 = normalisedVersion(v1);
String s2 = normalisedVersion(v2);
int cmp = s1.compareTo(s2);
String cmpStr = cmp < 0 ? "<" : cmp > 0 ? ">" : "==";
System.out.printf("result: "+"'%s' %s '%s'%n", v1, cmpStr, v2);
if(cmpStr.contains("<")){
return true;
}
if(cmpStr.contains(">")||cmpStr.contains("==")){
return false;
}
return false;
}
public static String normalisedVersion(String version) {
return normalisedVersion(version, ".", 4);
}
public static String normalisedVersion(String version, String sep, int maxWidth) {
String[] split = Pattern.compile(sep, Pattern.LITERAL).split(version);
StringBuilder sb = new StringBuilder();
for (String s : split) {
sb.append(String.format("%" + maxWidth + 's', s));
}
return sb.toString();
}
如果要测试,请将 googlePlayversion 字符串修改为高于本地版本。
我使用的源码比较方法来自How do you compare two version Strings in Java?