2016-12-23 5 views
0

Я работаю над приложением Я хочу, чтобы обновить приложение для пользователей, если новая версия доступна в магазине воспроизведения, приложение должно показать пользователю диалоговое окно.Как заставить обновление в приложении Android, если доступна новая версия?

+2

Когда вы открываете приложение, а затем вызываете веб-службу на свой сервер и проверяете, обновлено ли приложение? И если приложение обновляется, откройте приложение в Google Play Store и обновите приложение. –

+1

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

+1

Вы можете использовать внешний api для проверки установленной версии приложения и последней версии api. проверьте это http://stackoverflow.com/questions/25201349/programmatically-check-play-store-for-app-updates – Praveen

ответ

4
public class ForceUpdateAsync extends AsyncTask<String, String, JSONObject>{ 

    private String latestVersion; 
    private String currentVersion; 
    private Context context; 
    public ForceUpdateAsync(String currentVersion, Context context){ 
     this.currentVersion = currentVersion; 
     this.context = context; 
    } 

    @Override 
    protected JSONObject doInBackground(String... params) { 

     try { 
      latestVersion = Jsoup.connect("https://play.google.com/store/apps/details?id="+context.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() 
        .select("div[itemprop=softwareVersion]") 
        .first() 
        .ownText(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return new JSONObject(); 
    } 

    @Override 
    protected void onPostExecute(JSONObject jsonObject) { 
     if(latestVersion!=null){ 
      if(!currentVersion.equalsIgnoreCase(latestVersion)){ 
       // Toast.makeText(context,"update is available.",Toast.LENGTH_LONG).show(); 
       if(!(context instanceof SplashActivity)) { 
        if(!((Activity)context).isFinishing()){ 
         showForceUpdateDialog(); 
        } 
       } 
      } 
     } 
     super.onPostExecute(jsonObject); 
    } 

    public void showForceUpdateDialog(){ 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(new ContextThemeWrapper(context, 
       R.style.DialogDark)); 

     alertDialogBuilder.setTitle(context.getString(R.string.youAreNotUpdatedTitle)); 
     alertDialogBuilder.setMessage(context.getString(R.string.youAreNotUpdatedMessage) + " " + latestVersion + context.getString(R.string.youAreNotUpdatedMessage1)); 
     alertDialogBuilder.setCancelable(false); 
     alertDialogBuilder.setPositiveButton(R.string.update, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + context.getPackageName()))); 
       dialog.cancel(); 
      } 
     }); 
     alertDialogBuilder.show(); 
    } 
} 

в string.xml вы можете добавить, что массаж вы хотите, как это.

<string name="youAreNotUpdatedTitle">Update Available</string> 
    <string name="youAreNotUpdatedMessage">A new version of YOUR_APP_NAME is available. Please update to version\s</string> 
    <string name="youAreNotUpdatedMessage1">\s now</string> 
    <string name="update">Update</string> 

Помните, что вы должны определить стиль своего диалога в диалоговом коде.

теперь просто напишите функцию forceUpdate() в своей базовой деятельности и вызовите ее внутри метода onResume(), и все готово!

// check version on play store and force update 
    public void forceUpdate(){ 
     PackageManager packageManager = this.getPackageManager(); 
     PackageInfo packageInfo = null; 
     try { 
      packageInfo = packageManager.getPackageInfo(getPackageName(),0); 
     } catch (PackageManager.NameNotFoundException e) { 
      e.printStackTrace(); 
     } 
     String currentVersion = packageInfo.versionName; 
     new ForceUpdateAsync(currentVersion,BaseActivity.this).execute(); 
    } 
+0

эй этот код работает для меня, но не работает в режиме реального времени prograud enable plz help me –

0

Сохраните версию вашего приложения (которое вы выпустили на игровом автомате) на стороне сервера. Хит API каждый раз, когда пользователь открывает приложение и получает версию. Сравните версиюКод пользователя приложения, который в настоящее время используется, и тот, который вы сохранили на сервере. Вот код, чтобы получить VersionCode вашего приложения

PackageManager manager = this.getPackageManager(); 
PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0); 
String versionCode = info.versionCode; 

Если VersionCode не соответствует (т.е. VersionCode от сервера> приложения в VersionCode), предложит пользователю обновить.

P.S Если вы хотите использовать этот метод, вам нужно обновлять версию Code на своем сервере при каждом обновлении приложения на игровом сервере.

0

В первой операции вы можете сделать api-вызов, который должен вернуть последнюю версию вашего приложения. Сравните это с текущей версией приложения, если текущая версия ниже, появится диалоговое окно с просьбой обновить. Они обновляют кнопка может открыть вам приложение в игровом магазине

0

Вы можете сделать следующее.

  1. Вы должны иметь это функциональные возможности, реализованные в приложении, который можете check for the current version of your app on play store. , и если пользователь использует старую версию, затем введите их в .
  2. ваше приложение должно иметь любую аналитику (Facebook, Firebase, Localitics и т. Д.). Встроенный SDK, поддерживающий сообщения In-app. с помощью справку об этом, вы можете передавать сообщения Push Notification или In-app для обновления приложения.

с помощью этих методов вы можете попросить своих пользователей обновить приложение.