¿Cómo permitir que los usuarios verifiquen la última versión de la aplicación desde dentro de la aplicación?

Quiero agregar un botón “Buscar actualización” en las aplicaciones para que cuando alguien haga clic en él, muestre un mensaje de diálogo de brindis / progreso para verificar la versión de la aplicación.

Si se encuentra una nueva versión, las aplicaciones se descargarán automáticamente en el teléfono y permitirán que el usuario instale manualmente las aplicaciones actualizadas.

O cualquier otro método funcionará siempre que pueda verificar la última versión y notificar al usuario para la actualización.

Google actualizó Play Store hace dos meses. Esta es la solución que está trabajando ahora para mí …

class GetVersionCode extends AsyncTask { @Override protected String doInBackground(Void... voids) { String newVersion = null; try { Document document = Jsoup.connect("https://play.google.com/store/apps/details?id=" + MainActivity.this.getPackageName() + "&hl=en") .timeout(30000) .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6") .referrer("http://www.google.com") .get(); if (document != null) { Elements element = document.getElementsContainingOwnText("Current Version"); for (Element ele : element) { if (ele.siblingElements() != null) { Elements sibElemets = ele.siblingElements(); for (Element sibElemet : sibElemets) { newVersion = sibElemet.text(); } } } } } catch (IOException e) { e.printStackTrace(); } return newVersion; } @Override protected void onPostExecute(String onlineVersion) { super.onPostExecute(onlineVersion); if (onlineVersion != null && !onlineVersion.isEmpty()) { if (Float.valueOf(currentVersion) < Float.valueOf(onlineVersion)) { //show anything } } Log.d("update", "Current version " + currentVersion + "playstore version " + onlineVersion); } } 

y no te olvides de agregar la biblioteca JSoup

 dependencies { compile 'org.jsoup:jsoup:1.8.3'} 

y en Oncreate ()

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String currentVersion; try { currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } new GetVersionCode().execute(); } 

eso es todo ... Gracias a este enlace

Para ahorrar tiempo escribiendo para comprobar la actualización de la nueva versión de la aplicación de Android, lo escribí como biblioteca y código abierto en https://github.com/winsontan520/Android-WVersionManager

Puede usar esta biblioteca de Android: https://github.com/danielemaddaluno/Android-Update-Checker . Su objective es proporcionar un instrumento reutilizable para verificar asincrónicamente si existe alguna actualización más reciente de su aplicación en la Tienda. Se basa en el uso de Jsoup ( http://jsoup.org/ ) para probar si realmente existe una nueva actualización al analizar la página de la aplicación en Google Play Store:

 private boolean web_update(){ try { String curVersion = applicationContext.getPackageManager().getPackageInfo(package_name, 0).versionName; String newVersion = curVersion; newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + package_name + "&hl=en") .timeout(30000) .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6") .referrer("http://www.google.com") .get() .select("div[itemprop=softwareVersion]") .first() .ownText(); return (value(curVersion) < value(newVersion)) ? true : false; } catch (Exception e) { e.printStackTrace(); return false; } } 

Y como función de "valor" lo siguiente (funciona si los valores están entre 0-99):

 private long value(String string) { string = string.trim(); if( string.contains( "." )){ final int index = string.lastIndexOf( "." ); return value( string.substring( 0, index ))* 100 + value( string.substring( index + 1 )); } else { return Long.valueOf( string ); } } 

Si solo desea verificar una discrepancia entre las versiones, puede cambiar:

value(curVersion) < value(newVersion) con value(curVersion) != value(newVersion)

Si se trata de una aplicación en el mercado, al iniciar la aplicación, ejecute una intención para abrir la aplicación Market con suerte, lo que hará que busque actualizaciones.

De lo contrario, implementar y actualizar el verificador es bastante fácil. Aquí está mi código (más o menos) para él:

 String response = SendNetworkUpdateAppRequest(); // Your code to do the network request // should send the current version // to server if(response.equals("YES")) // Start Intent to download the app user has to manually install it by clicking on the notification startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("URL TO LATEST APK"))); 

Por supuesto, debe volver a escribir esto para hacer la solicitud en un hilo de fondo, pero se entiende la idea.

Si le gusta algo un poco pero más complejo, pero permite que su aplicación aplique automáticamente la actualización, consulte aquí .

Navega a tu página de juego:

 https://play.google.com/store/apps/details?id=com.yourpackage 

Usando un HTTP GET estándar. Ahora, el siguiente jQuery encuentra información importante para ti:

Versión actual

 $("[itemprop='softwareVersion']").text() 

Qué hay de nuevo

 $(".recent-change").each(function() { all += $(this).text() + "\n"; }) 

Ahora que puede extraer esta información manualmente, simplemente cree un método en su aplicación que ejecute esto por usted.

 public static String[] getAppVersionInfo(String playUrl) { HtmlCleaner cleaner = new HtmlCleaner(); CleanerProperties props = cleaner.getProperties(); props.setAllowHtmlInsideAttributes(true); props.setAllowMultiWordAttributes(true); props.setRecognizeUnicodeChars(true); props.setOmitComments(true); try { URL url = new URL(playUrl); URLConnection conn = url.openConnection(); TagNode node = cleaner.clean(new InputStreamReader(conn.getInputStream())); Object[] new_nodes = node.evaluateXPath("//*[@class='recent-change']"); Object[] version_nodes = node.evaluateXPath("//*[@itemprop='softwareVersion']"); String version = "", whatsNew = ""; for (Object new_node : new_nodes) { TagNode info_node = (TagNode) new_node; whatsNew += info_node.getAllChildren().get(0).toString().trim() + "\n"; } if (version_nodes.length > 0) { TagNode ver = (TagNode) version_nodes[0]; version = ver.getAllChildren().get(0).toString().trim(); } return new String[]{version, whatsNew}; } catch (IOException | XPatherException e) { e.printStackTrace(); return null; } } 

Utiliza HtmlCleaner

No hay una API para esto, y no puede instalarlo automáticamente, solo puede redirigirlos a su página Market para que puedan actualizar. Puede tener su última versión en un archivo en un servidor web y hacer que la aplicación lo verifique. Aquí hay una implementación de esto:

http://code.google.com/p/openintents/source/browse/#svn%2Ftrunk%2FUpdateCheckerApp

agregue compile 'org.jsoup:jsoup:1.10.2' a dependencias en APP LEVEL build.gradle

&

Solo agregue el código a continuación y estará listo para comenzar.

 private class GetVersionCode extends AsyncTask { @Override protected String doInBackground(Void... voids) { try { newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + SplashActivity.this.getPackageName() + "&hl=it") .timeout(30000) .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6") .referrer("http://www.google.com") .get() .select("div[itemprop=softwareVersion]") .first() .ownText(); return newVersion; } catch (Exception e) { return newVersion; } } @Override protected void onPostExecute(String onlineVersion) { super.onPostExecute(onlineVersion); if (!currentVersion.equalsIgnoreCase(onlineVersion)) { //show dialog new AlertDialog.Builder(context) .setTitle("Updated app available!") .setMessage("Want to update app?") .setPositiveButton("Update", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // continue with delete final String appPackageName = getPackageName(); // getPackageName() from Context or Activity object try { Toast.makeText(getApplicationContext(), "App is in BETA version cannot update", Toast.LENGTH_SHORT).show(); startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName))); } catch (ActivityNotFoundException anfe) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName))); } } }) .setNegativeButton("Later", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // do nothing dialog.dismiss(); new MyAsyncTask().execute(); } }) .setIcon(android.R.drawable.ic_dialog_alert) .show(); } } } 

Primero debe verificar la versión de la aplicación en el mercado y compararla con la versión de la aplicación en el dispositivo. Si son diferentes, puede ser una actualización disponible. En esta publicación anoté el código para obtener la versión actual del mercado y la versión actual en el dispositivo y compararlos juntos. También mostré cómo mostrar el diálogo de actualización y redirigir al usuario a la página de actualización. Por favor visite este enlace: https://stackoverflow.com/a/33925032/5475941