如果新版本可用,如何在Android应用程序中强制更新?

时间:2016-12-23 06:45:56

标签: android dialog

我正在开发一个应用程序,如果在Play商店中提供新版本,我想给应用程序用户强制更新,该应用程序应向用户显示一条对话框消息。

6 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:1)

将您应用的versionCode(已在Playstore上发布)存储在服务器端。每次用户打开应用程序并获取versionCode时,都会点击API。比较应用程序用户当前使用的versionCode和您在服务器上存储的版本。以下是获取应用的versionCode的代码

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

如果versionCode不匹配(即来自服务器&gt; app的versionCode的versionCode),则提示用户更新。

P.S如果您想使用此方法,则每次更新Playstore上的应用程序时都必须更新服务器上的versionCode。

答案 2 :(得分:0)

在您的第一个活动中,您可以拨打应该返回应用程序最新版本的API调用。如果当前版本较低,则将其与当前应用版本进行比较,显示要求更新的对话框。他们更新按钮可以在Play商店打开你的应用程序

答案 3 :(得分:0)

您可以执行以下操作。

  1. 您应该在您的应用中实现此功能 可以check for the current version of your app on play store。 如果用户正在使用旧版本,则提示他们进行对话 更新
  2. 您的应用应该有任何分析(Facebook,Firebase, Localytics等。)集成了SDK,支持应用内消息。同 有助于此,您可以广播推送通知或应用内消息 更新应用程序。
  3. 借助此技术,您可以要求用户更新应用。

答案 4 :(得分:0)

最近,谷歌宣布借助于google提供的play core库来实现此目的的官方方法。

有两种可用的更新类型-立即更新和灵活更新。 开发人员需要遵循某些步骤才能将强制更新集成到他/她的项目中。

  1. 检查更新可用性。
  2. 开始更新
  3. 获取回调以获取更新状态
  4. 处理灵活的更新
  5. 安装灵活的更新
  6. 处理立即更新

用户在更新过程中杀死应用程序时有一些机会,因此开发人员也需要处理这种情况,这在第4步和第6步中都有提及。

此处是简要文档和指南的链接,以将其集成到您的项目中。  Force update provided by google.

快乐的编码..

答案 5 :(得分:0)

更新2019 Android Dev Summit

2019年Google Android开发者峰会!宣布了具有{strong>即时和灵活应用更新类型的Support in-app updates播放应用更新弹出窗口。

*应用内更新仅适用于运行Android 5.0(API级别21)或更高版本的设备