2013-08-05 17 views
8

Voglio controllare la versione dell'applicazione su Google Play quando la mia app è aperta. Se l'app ha una versione superiore rispetto all'app installata, desidero avvisare l'utente di aggiornare l'app. Ho trovato il jar "android-query" da here, in questo caso non riesco a controllare la versione dinamicamente, suppongo di impostare Major, Minor o Revision. Qualcuno, per favore aiutami come posso fare?Controllo versione in-app Android

Grazie in anticipo

+0

Ciao Jonathon Reinhart, Scusa, davvero non capisco. Puoi spiegarmi per favore? – Sathish

+0

Questo viene fatto sempre dalle app anche dalle app di google. A volte un servizio di backend viene aggiornato in un modo che non è più compatibile con le vecchie versioni di app in the wild. Pertanto, potrebbe essere richiesto di farlo nella tua app se non vuoi supportare versioni di 3 anni perché alcune persone non aggiornano mai nulla. –

+0

trovato una soluzione qui http://stackoverflow.com/questions/7298106/android-app-check-for-latest-app-version –

risposta

9

In sostanza, si dovrebbe verificare la versione più recente della tua applicazione sul mercato e la versione del app sul dispositivo e decidere se c'è qualche aggiornamento disponibile. Per fare questo si prega di provare questo:

si dovrebbe usare questo per ottenere la versione attuale (versione del app sul dispositivo):

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

e di utilizzare per ottenere la versione più recente di Google Play (tratto da 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; 
    } 
} 

Poi, quando la vostra applicazione si avvia, li controlla gli uni contro gli altri come questo:

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

E mostra la finestra di dialogo di aggiornamento dell'utente. Ma assicurati di aver già importato la libreria jsoup.

Extra: Per l'importazione jsoup biblioteca, attenersi alla seguente procedura:

1- Andare su Menu
2- struttura del progetto
3- lato sinistro fare clic su App
4- Selezionare la scheda dipendenze
5 file - Clicca su +
6- Clicca sulla dipendenza biblioteca
7- Cerca "jsoup"
8- scegliere org.jsoup: jsoup e fare clic su OK

+0

c'è un modo per non utilizzare jsoup lib \ –

+0

Sì, c'è, ma questo approccio è moderno e diretto. per aggiungere il jsoup non hai nemmeno bisogno di trovare il file jar. Devi solo aprire lo studio Android, vai al menu File e seguire i miei 8 passaggi, quindi puoi aggiungere jsoup cercando solo il nome jsoup. È l'approccio 1, 2, 3 :) Per favore fatemi sapere se avete bisogno di ulteriori spiegazioni. – Mohammad

+0

In futuro, non copiare contenuti da altrove senza una chiara attribuzione.È visto come un plagio. Vedi http://stackoverflow.com/help/referencing – Matt

5

Se non si desidera utilizzare una libreria come Jsoup, è possibile utilizzare qualcosa di simile per ottenere il numero di versione corrente da 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(); 
    } 
} 

Se si mantiene il "& hl = it" in l'URL, la codifica dei caratteri UTF-8 dovrebbe essere OK.