Как разрешить пользователям проверять последнюю версию приложения внутри приложения?

Я хочу добавить кнопку «Проверить обновление» в приложениях, чтобы, когда кто-то нажимает на нее, она отобразит диалог с сообщением о тостах / прогресс для проверки версии приложения.

Если будет найдена новая версия, приложения автоматически загружат ее на телефон и позволят пользователю вручную устанавливать обновленные приложения.

Или любой другой метод будет делать, пока он может проверять последнюю версию и уведомлять пользователя о необходимости обновления.

Обновленный игровой магазин Google за два месяца до этого. Это решение, работающее прямо сейчас для меня ..

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

и не забудьте добавить библиотеку JSoup

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

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

вот и все .. Благодаря этой ссылке

Чтобы сэкономить время на запись для проверки обновления новой версии приложения для Android, я написал ее как библиотеку и с открытым исходным кодом на странице https://github.com/winsontan520/Android-WVersionManager

Вы можете использовать эту Android-библиотеку: https://github.com/danielemaddaluno/Android-Update-Checker . Он направлен на предоставление повторно используемого инструмента для проверки асинхронно, если существует новое выпущенное обновление вашего приложения в Магазине. Он основан на использовании Jsoup ( http://jsoup.org/ ), чтобы проверить, действительно ли существует новое обновление, анализируя страницу приложения в 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; } } 

И как функция «значение», следующая (работает, если значения находятся между 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 ); } } 

Если вы хотите только проверить несоответствие между версиями, вы можете изменить:

value(curVersion) < value(newVersion) со value(curVersion) != value(newVersion)

Если это приложение на рынке, а затем при запуске приложения, пожалуйте намерение открыть приложение Market, надеюсь, что он заставит его проверять наличие обновлений.

В противном случае реализация и обновление проверки довольно просто. Вот мой код (примерно) для него:

 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"))); 

Конечно, вы должны переписать это, чтобы выполнить запрос в фоновом streamе, но вы получите эту идею.

Если вам нравится что-то немного, но сложнее, но позволяет вашему приложению автоматически применять обновление, смотрите здесь .

Перейдите на страницу воспроизведения:

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

Использование стандартного HTTP GET. Теперь следующий jQuery найдет для вас важную информацию:

Текущая версия

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

Какие новости

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

Теперь, когда вы можете извлечь эту информацию вручную, просто создайте в своем приложении метод, который выполнит это для вас.

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

Использует HtmlCleaner

Для этого нет API, и вы не можете его автоматически установить, вы можете просто перенаправить их на свою страницу Market, чтобы они могли обновиться. Вы можете загрузить свою последнюю версию в файл на веб-сервере и проверить это приложение. Вот одна из реализаций этого:

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

добавить compile 'org.jsoup:jsoup:1.10.2' в зависимости от APP LEVEL build.gradle

&

Просто добавьте код ниже, и вам хорошо идти.

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

Сначала вы должны проверить версию приложения на рынке и сравнить ее с версией приложения на устройстве. Если они отличаются, это может быть доступное обновление. В этом посте я записал код для получения текущей версии рынка и текущей версии на устройстве и сравнил их вместе. Я также показал, как показать диалог обновления и перенаправить пользователя на страницу обновления. Перейдите по этой ссылке: https://stackoverflow.com/a/33925032/5475941

  • Включить частичную компиляцию в IntelliJ IDEA
  • Лучший способ сравнить даты в Android
  • Можно ли читать данные Firebase без подключения слушателей?
  • Обслуживание статических файлов со встроенным Jetty
  • Преобразование римских чисел в десятичные числа
  • Как изменить десятичный разделитель DecimalFormat от запятой до точки / точки?
  • Как избежать% в String.Format?
  • Могут ли новые версии JRE запускать Java-программы, скомпилированные со старыми версиями JDK?
  • Android - предотrotation белого экрана при запуске
  • Можем ли мы предположить значения массива по умолчанию в Java? например, предположим, что массив int задан для всех нhive?
  • Как я могу избежать задержек сбора мусора в Java-играх? (Лучшие практики)
  • Давайте будем гением компьютера.