How to notify users about an Android app update?

前端 未结 17 840
眼角桃花
眼角桃花 2020-11-28 23:30

I\'ve built an Android app which is now on Play Market. From time to time, I make updates to it, and I\'d like to let users know that a new version is available.

How

17条回答
  •  日久生厌
    2020-11-29 00:21

    Found a nice solution for your problem: Let´s say you want to check for version updates manually on app start and notify your users for the new Update.

    Step 1: Download android-market-api (not the .jar file, the full project!)

    Step 2: After importing it to eclipse, write in your activity the following code:

    MarketService ms = new MarketService(activity);
    ms.level(MarketService.REVISION).checkVersion();
    

    now, we need to modify MarketService.java, because it seems to be broken.

    Step 3: rewrite callback method and add the following methods

    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();
        }
    

    If you want to test it, modify googlePlayversion string to a higher version than your local one.

    The source comparison method I used is from How do you compare two version Strings in Java?

提交回复
热议问题