2013-08-05 5 views
8

Я хочу проверить версию приложения в Google Play, когда мое приложение открыто. Если приложение имеет более высокую версию, чем установленное приложение, я хочу уведомить пользователя об обновлении приложения. Я обнаружил, что «андроид-запрос» jar от here, в этом я не могу проверить динамическую версию на этом, я полагаю, чтобы установить Major, Minor или Revision. Кто-нибудь, пожалуйста, помогите мне, как я могу это сделать?Android In-app version check

Заранее спасибо

+0

Hi Jonathon Reinhart, Извините, я действительно не понимаю. Не могли бы вы объяснить мне? – Sathish

+0

Это все время используется приложениями даже для собственных приложений Google. Иногда бэкэнд-сервис обновляется таким образом, который больше не совместим со старыми версиями приложений в дикой природе. Таким образом, может потребоваться сделать это в вашем приложении, если вы не хотите поддерживать 3-летние версии, потому что некоторые люди ничего не обновляют. –

+0

Найдено решение здесь http://stackoverflow.com/questions/7298106/android-app-check-for-latest-app-version –

ответ

9

В принципе, вы должны проверить последнюю версию приложения на рынке и версию приложения на устройстве и решить, есть ли обновление. Для делать это, пожалуйста, попробуйте следующее:

Вы должны использовать это для получения текущей версии (версия приложения на устройстве):

private String getCurrentVersion(){ 
PackageManager pm = this.getPackageManager(); 
PackageInfo pInfo = null; 

     try { 
      pInfo = pm.getPackageInfo(this.getPackageName(),0); 

     } catch (PackageManager.NameNotFoundException e1) { 
      e1.printStackTrace(); 
     } 
     String currentVersion = pInfo.versionName; 

     return currentVersion; 
    } 

И использовать это для получения последней версии в Google Play (взяты из https://stackoverflow.com/a/32942785/444991):

private class GetLatestVersion extends AsyncTask<String, String, String> { 
String latestVersion; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     try { 
      //It retrieves the latest version by scraping the content of current version from play store at runtime 
      String urlOfAppFromPlayStore = "https://play.google.com/store/apps/details?id= your app package address"; 
      Document doc = Jsoup.connect(urlOfAppFromPlayStore).get(); 
      latestVersion = doc.getElementsByAttributeValue("itemprop","softwareVersion").first().text(); 

     }catch (Exception e){ 
      e.printStackTrace(); 

     } 

     return latestVersion; 
    } 
} 

Затем, когда начинается ваше приложение, проверить их против друг друга, как это:

String latestVersion = ""; 
     String currentVersion = getCurrentVersion(); 
     Log.d(LOG_TAG, "Current version = " + currentVersion); 
     try { 
      latestVersion = new GetLatestVersion().execute().get(); 
      Log.d(LOG_TAG, "Latest version = " + latestVersion); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (ExecutionException e) { 
      e.printStackTrace(); 
     } 

     //If the versions are not the same 
     if(!currentVersion.equals(latestVersion)){ 
      final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle("An Update is Available"); 
      builder.setPositiveButton("Update", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        //Click button action 
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=your app package address"))); 
        dialog.dismiss(); 
       } 
      }); 

      builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        //Cancel button action 
       } 
      }); 

      builder.setCancelable(false); 
      builder.show(); 
     } 

И покажите диалоговое окно обновления пользователя. Но убедитесь, что вы уже импортировали библиотеку jsoup.

Дополнительно: Для импорта jsoup библиотеки, выполните следующие действия:

1 Перейдите в меню
2 Структура проекта
3- левая сторона нажмите на приложение
4 Выберите вкладку Зависимости
5 файлов - нажмите на +
6 нажмите на библиотеку зависимости
7- Поиск "jsoup"
8- выбрать org.jsoup: jsoup и нажмите кнопку оК

+0

есть ли какой-либо способ без использования jsoup lib \ –

+0

Да, есть, но этот подход является современным и прямым. для добавления jsoup вам даже не нужно искать файл jar. Вы просто открываете студию Android в меню «Файл» и следуете моим 8 шагам, после чего вы можете добавить jsoup, только выполнив поиск имени jsoup. Это подход 1, 2, 3 :) Пожалуйста, дайте мне знать, если вам нужно больше объяснений. – Mohammad

+0

В будущем ddo не копирует содержимое из других источников без четкой атрибуции.Это рассматривается как плагиат. См. Http://stackoverflow.com/help/referencing – Matt

5

Если вы не хотите использовать библиотеку как Jsoup, вы можете использовать что-то вроде этого, чтобы получить номер текущей версии от Google Play:

import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.net.MalformedURLException; 
import java.net.URL; 

public class StackAppVersion { 

    public static void main(String[] args) { 
     try { 
      System.out.println(currentVersion()); 
     } catch (IOException ex) { 
      System.out.println("Failed to read Google Play page!"); 
     } 
    } 

    private static String currentVersion() throws IOException { 
     StringBuilder sb = new StringBuilder(); 

     try (Reader reader = new InputStreamReader(
       new URL("https://play.google.com/store/apps/details?id=com.stackexchange.marvin&hl=en") 
         .openConnection() 
         .getInputStream() 
       , "UTF-8" 
     )) { 
      while (true) { 
       int ch = reader.read(); 
       if (ch < 0) { 
        break; 
       } 
       sb.append((char) ch); 
      } 
     } catch (MalformedURLException ex) { 
      // Can swallow this exception if your static URL tests OK. 
     } 

     String parts[] = sb.toString().split("softwareVersion"); 

     return parts[1].substring(
       parts[1].indexOf('>') + 1, parts[1].indexOf('<') 
     ).trim(); 
    } 
} 

Если вы держите «& гл = еп» в URL, кодировка символов UTF-8 должна быть в порядке.