强制用户更新我的应用

时间:2018-06-12 09:29:19

标签: android

如何通过访问Google Play商店强制用户更新我的应用?如果有新的更新,则会显示一个对话框,其中有2个按钮可以更新应用程序或退出应用程序。

除非有最新版本,否则不允许应用运行。

我正在使用eclipse,因为一些项目问题,我无法迁移到android studio。

请帮助

4 个答案:

答案 0 :(得分:0)

主要活动开始时使用Dialogs。如果他接受,只需将用户重定向到PlayStore上应用的网址,然后退出应用(here are examples on how doing it)。

来自Anrdoid documentation

public class YourDialogFragment extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(R.string.please_update)
               .setPositiveButton(R.string.Ok, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // launch a browser with your PlayStore APP URL
                   }
               })
               .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // Exit the app
                       android.os.Process.killProcess(android.os.Process.myPid()); 
                   }
               });
        // Create the AlertDialog object and return it
        return builder.create();
    }
}
  

现在,当您创建此类的实例并在该对象上调用show()时,对话框将如图1所示。

只需创建一个实例,然后使用show() onCreateDialog中的MainActivity方法。

请注意,Dialogs使用Fragments,这需要API级别11.(您应该能够在build.gradle文件中检查您正在构建的API级别)

答案 1 :(得分:0)

为应用程序实施一种方法,以检查它是否是最新版本。

您可以通过托管包含最新版本信息的更新文件来执行此操作。此文件通常采用json格式,但也可以采用您喜欢的任何格式。应用程序必须查询此更新文件,如果应用程序的当前版本小于更新文件中指示的版本,则它将显示更新提示。

如果应用确定需要更新,请打开对话框提示,然后打开应用的播放商店页面

要启动对话框提示,请参阅官方Dialogs指南。鉴于问题不是“如何启动对话框”,我将重点讨论如何更新应用程序。

要将Google Play商店打开到特定的应用页面,您必须使用“查看”操作和“市场计划”启动意图,如此

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));

要小心,如果设备没有安装谷歌播放商店,那么这将抛出异常。其他应用程序也可以接收此类意图,并且在多个应用程序可以接收意图的情况下,将出现应用程序选择器对话框。

<强>挑战:

如果应用必须检查更新,并且只有在最新版本时才能运行,那么如果设备未连接到互联网,则该应用无法运行。

该应用将严重依赖Google Play商店,如果需要更新并且设备上没有Play商店,则该应用无法运行

如果更新文件因任何原因不可用,则该应用程序也无法正常运行

答案 2 :(得分:0)

使用 Noafix 中提到的对话框。当版本不匹配时调用警告对话框。

同时将对话框设置为 false ,以便用户无法通过按下来删除对话框!

 private void showDialog()
    {
        final android.app.AlertDialog.Builder alertDialogBuilder = new android.app.AlertDialog.Builder(this);
        alertDialogBuilder.setTitle("Update");
        alertDialogBuilder.setMessage("Please update to continue?");
        alertDialogBuilder.setIcon(R.drawable.warning);
        alertDialogBuilder.setCancelable(false)
        alertDialogBuilder.setPositiveButton("Confirm",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface arg0, int arg1) {
                           startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
                    }
                });

        // Add a negative button and it's action. In our case, just hide the dialog box
        alertDialogBuilder.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                     finishAffinity();
                    }
                });

        // Now, create the Dialog and show it.
        final android.app.AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }

您可以将您的版本名称设为:

versionName = getApplicationContext().getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), 0).versionName;

现在使用任何其他客户端http调用从您的服务器获取当前版本,并检查您的版本:

 if(!versionName.equals(version)){showDialog();}

注意:为此,您应该在服务器中实现一个版本文件,您必须在该文件中添加新版本,以便使用http调用您的应用可以获取新版本名称并检查应用版本!

答案 3 :(得分:0)

  • 您绝对需要用户更新才能继续使用该应用,您可以提供简单的版本控制API。 API将如下所示:

    versionCheck API:

    - &gt;请求参数:

    int appVersion

    - &GT;响应

    boolean forceUpgrade boolean recommendedUpgrade

    当您的应用启动时,您可以调用此API传递当前应用版本,并检查版本控制API调用的响应。

    如果forceUpgrade为true,则显示一个弹出式对话框,其中包含允许用户退出应用的选项,或者转到Google Play商店以升级应用。

    否则,如果recommendedUpgrade为true,则显示弹出对话框,其中包含要更新的选项或继续使用该应用程序。

    即使有这种强制升级功能,除非绝对需要,否则你应该继续支持旧版本。

    试试这个:首先你需要调用playstore链接,从那里获取当前版本,然后将它与你当前的版本进行比较。

    String currentVersion,latestVersion; 对话框对话框;

    private void getCurrentVersion(){  PackageManager pm = this.getPackageManager();         PackageInfo pInfo = null;

        try {
            pInfo =  pm.getPackageInfo(this.getPackageName(),0);
    
        } catch (PackageManager.NameNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        currentVersion = pInfo.versionName;
    

    new GetLatestVersion()。execute();

    }

    私有类GetLatestVersion扩展了AsyncTask           {

        private ProgressDialog progressDialog;
    
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }
    
        @Override
        protected JSONObject doInBackground(String... params) {
            try {
    
                Document doc = Jsoup.connect(urlOfAppFromPlayStore).get();
                latestVersion = doc.getElementsByAttributeValue
                        ("itemprop","softwareVersion").first().text();
    
            }catch (Exception e){
                e.printStackTrace();
    
            }
    
            return new JSONObject();
        }
    
        @Override
        protected void onPostExecute(JSONObject jsonObject) {
            if(latestVersion!=null) {
                if (!currentVersion.equalsIgnoreCase(latestVersion)){
                   if(!isFinishing()){ 
                    showUpdateDialog();
                    }
                }
            }
            else
                background.start();
            super.onPostExecute(jsonObject);
        }
    }
    

    private void showUpdateDialog(){

        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    
        builder.setTitle("A New Update is Available");
    
        builder.setPositiveButton("Update", new 
       DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse
                        ("market://details?id=yourAppPackageName")));
                dialog.dismiss();
            }
        });
    
        builder.setNegativeButton("Cancel", new 
          DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                background.start();
            }
        });
    
        builder.setCancelable(false);
        dialog = builder.show();
    }