强制用户更新我的应用程序

问题描述 投票:0回答:5

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

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

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

请帮忙

android
5个回答
0
投票
当您的主要活动启动时,使用

Dialogs。如果用户接受,只需将用户重定向到 PlayStore 上您的应用程序的 URL,然后退出应用程序(这里是如何操作的示例)。

取自

Anrdoid文档

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级别)


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;

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

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

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


0
投票

实现应用程序检查是否是最新版本的方法。

您可以通过托管包含最新版本信息的更新文件来做到这一点。该文件通常采用 json 格式,但也可以采用您喜欢的任何格式。应用程序必须查询此更新文件,如果应用程序的当前版本低于更新文件中指示的版本,则会显示更新提示。

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

要启动对话框提示,请参阅官方

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

要打开 google play 商店到特定的应用程序页面,您必须使用 View 操作和市场方案 uri 启动一个意图,如下所示

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

请注意,如果设备没有安装 google play store,那么这将引发异常。其他应用程序也可能接收此类意图,并且在多个应用程序可以接收该意图的情况下,将出现一个应用程序选择器对话框。

挑战:

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

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

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


0
投票
  • 您绝对需要用户更新才能继续使用该应用程序,您可以提供一个简单的版本控制API。 API 看起来像这样:

    版本检查API:

    ->请求参数:

    int 应用程序版本

    -> 回应

    布尔力升级 布尔推荐升级

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

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

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

    即使具备这种强制升级功能,您也应该继续支持旧版本,除非绝对需要。

    试试这个:首先,您需要对 Playstore 链接发出请求,从那里获取当前版本,然后将其与您当前的版本进行比较。

    字符串当前版本,最新版本; 对话框对话框;

    私有无效 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); } }
    
    
    私有无效 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(); }
    
    

0
投票
这是你如何做到这一点的逻辑

  1. 假设你使用firebase实时数据库,你在那里存储 更新=强制更新/非强制更新/无更新

  2. 每当您的应用程序打开时,它都会运行后台任务来获取更新值,如果 UpdateCompulsory 则显示一个未取消的对话框,如果 UpdateNotCompulsory 则显示可取消的对话框,如果 NoUpdate 则不执行任何操作

© www.soinside.com 2019 - 2024. All rights reserved.