2013-08-05 21 views
8

Chcę sprawdzić wersję aplikacji w Google Play, gdy moja aplikacja jest otwarta. Jeśli aplikacja ma wyższą wersję niż zainstalowana aplikacja, chcę powiadomić użytkownika o aktualizacji aplikacji. Znalazłem ten słoik "kwerendy Android" z here, w tym nie mogę sprawdzić wersję dynamicznie na ten temat, przypuszczam, aby ustawić Major, Minor lub Revision. Ktoś mi pomoże, jak mogę to zrobić?Kontrola wersji w aplikacjach na Androida

góry dzięki

+0

Witaj Jonathon Reinhart, Przepraszam, naprawdę nie rozumiem. Czy możesz mi wyjaśnić? – Sathish

+0

Robi się to cały czas przez aplikacje, nawet aplikacje Google. Czasami usługa backendu jest aktualizowana w sposób, który nie jest już zgodny ze starszymi wersjami aplikacji na wolności. Dlatego może być wymagane, aby zrobić to w swojej aplikacji, jeśli nie chcesz obsługiwać wersji 3-letnich, ponieważ niektóre osoby nigdy niczego nie aktualizują. –

+0

znalazł rozwiązanie tutaj http://stackoverflow.com/questions/7298106/android-app-check-for-latest-app-version –

Odpowiedz

9

Zasadniczo należy sprawdzić najnowszą wersję swojej aplikacji na rynku i wersji aplikacji na urządzeniu i zdecydować, czy istnieje jakakolwiek dostępna aktualizacja. Dla robi to spróbuj tego:

Należy to wykorzystać dla uzyskania aktualnej wersji (wersja aplikacji na urządzeniu):

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

I to wykorzystać dla uzyskania najnowszej wersji w Google Play (zaczerpnięte z 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; 
    } 
} 

Następnie podczas uruchamiania aplikacji, sprawdź je przed każdym innym tak:

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

Wyświetl okno dialogowe aktualizacji użytkownika. Ale upewnij się, że już zaimportowałeś bibliotekę jsoup.

Extra: W przypadku importowania jsoup bibliotekę, wykonaj następujące kroki:

1- Przejdź do menu
2- struktura projektu
3- lewej stronie kliknij na aplikacji
4- Wybierz zakładkę zależności
: 5 plików - Kliknij na +
6- Kliknij na zależnościach bibliotek
7- Search "jsoup"
8- wybrać org.jsoup: jsoup i kliknij OK

+0

jest jakiś sposób bez użycia jsoup lib \ –

+0

Tak, jest, ale to podejście jest nowoczesne i proste. aby dodać jsoup, nie musisz nawet znajdować pliku JAR. Wystarczy otworzyć studio Android, przejdź do menu Plik i postępuj zgodnie z moimi 8 krokami, a następnie możesz dodać jsoup, szukając tylko nazwy jsoup. Jest to podejście 1, 2, 3 :) Daj mi znać, jeśli potrzebujesz więcej wyjaśnień. – Mohammad

+0

W przyszłości nie kopiować treści z innych źródeł bez wyraźnej atrybucji.Jest postrzegany jako plagiat. Zobacz http://stackoverflow.com/help/referencing – Matt

5

Jeśli nie chcesz korzystać z biblioteki jak Jsoup, można użyć coś takiego dostać aktualny numer wersji z 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(); 
    } 
} 

Jeśli zachować „& hl = pl” w URL, kodowanie znaków UTF-8 powinno być OK.

Powiązane problemy