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

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

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

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

8 Solutions collect form web for “Как разрешить пользователям проверять последнюю версию приложения внутри приложения?”

Обновленный игровой магазин 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

  • MathML и Java
  • Полноэкранный просмотр без растягивания видео
  • Как получить TimeZone от мобильного телефона Android?
  • Как добавить изображение в текст TextView?
  • Отправка электронной почты на Android с использованием API JavaMail без использования стандартного / встроенного приложения
  • Android: добавление текстового представления в линейный макет программно
  • Не удалось выполнить компиляцию: Тип программы уже присутствует: com.google.android.gms.internal.measurement.zzabn
  • Почему константы массива могут использоваться только в инициализаторах?
  • Как выполнить итерацию файлов в каталоге в Java?
  • Получить имя устройства Android
  • размер растрового изображения превышает бюджетную ошибку Vm
  • Interesting Posts

    Создание m различных случайных чисел в диапазоне

    Есть ли способ поиска в меню приложений Windows, например, CMD + SHIFT + / OSX OSX?

    Проблемы с перекодированием MKV в MP4

    Определение Z порядка просмотров RelativeLayout в Android

    Что такое синтаксис?

    Импорт flask.exthook вызывает ModuleNotFoundError

    Вычислить отличие от предыдущего элемента с LINQ

    Обновление дублирующего ключа так же, как вставка

    Есть ли способ контролировать здоровье моего интернет-соединения?

    Android-приложение вылетает с сигналом SIGABRT 6 только при отладке Eclipse

    Какова наилучшая практика для работы с паролями в репозиториях git?

    Получение даты с на несколько часов

    Android-файл для сохранения на внешнем хранилище

    Как включить / отключить чрезмерное сканирование на моем телевизоре в Catalyst Control Center?

    Как окна определяют, какой исполняемый файл запускается

    Давайте будем гением компьютера.