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

2023-11-30

我正在开发一个应用程序,如果游戏商店上有新版本,我想向应用程序用户强制更新,该应用程序应该向用户显示一条对话框消息。


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();
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果有新版本可用,如何强制更新 Android 应用程序? 的相关文章

  • 排除jar中的文件进入apk

    我最近添加了一些新的罐子到我的android项目 一些 jar 包含 version properties 其中之一甚至包含 README TXT 我如何告诉 eclipse adt ant 排除文件进入 apk 显然我可以解压 apk 删
  • 在 Android 中存储照片相关数据的最佳方式是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要为我的应用程序存储一些照片相关信息 据我所知 您可以向图像内容提供商读取 写入 GPS 位置和图像描述 我还需要添加用于云同步的字段 标志
  • Android Studio 0.8.2 URI 有一个权限组件

    我收到 Gradle 项目同步失败 消息 当我启动 Android Studio 时 当我尝试清理项目时 我收到 无法完成 Gradle 执行原因 URI 具有权限组件 我已经尝试了几件事 但仍然陷入困境 我将配置文件从用户文件夹中移出 并
  • 有人知道如何在android中实现像Unfold(这是iphone中的应用程序)这样的效果吗?

    我怎样才能实现这个效果呢 任何建议都会对我有帮助 None
  • 如何刷新 Android 上的 MediaStore?

    这最初是 Android 论坛上的一个一般用户问题 然而 它必然成为一个编程问题 这是我的问题 Android 有一个服务 MediaScanner 每当 我相信 SD 卡卸载和重新安装时它都会在后台运行 该服务收集卡上所有媒体文件的数据
  • 导入的项目抛出 java.lang.ClassNotFoundException

    所以我将一个现有的项目导入到 eclipse 中 但让它工作时遇到了很多麻烦 该项目与其他三个图书馆项目一起提供 谷歌播放服务库 捕获活动 肖像二维码 As soon as I imported the project I went und
  • 如何从号码选择器中跳过某些号码?

    选号器 np NumberPicker findViewById R id numberPicker1 np setMaxValue 200 np setMinValue 1 Button b Button findViewById R i
  • 片段和通知:针对通知中的不同活动;取决于屏幕配置

    问题 如何决定做什么Activity a Notification如果目标可能取决于配置 屏幕尺寸 方向等 则应启动 就像人们使用时经常出现的情况一样Fragments Details 让我们考虑一下新闻阅读器示例 http develop
  • Motorola Android 2.2 相机忽略 EXTRA_OUTPUT 参数

    我以编程方式打开相机来拍摄视频 我告诉相机使用如下代码将视频文件放置到指定位置 Intent intent new Intent MediaStore ACTION VIDEO CAPTURE File out new File sdcar
  • 如何判断Android设备是否有触摸屏?

    我花了相当多的时间让我的 UI 仅支持键盘输入 但最终我不确定我是否可以相信 Android 设备都有触摸屏的假设 有没有办法判断Android设备是否有触摸屏 您应该研究现有设备并阅读Android 兼容性定义文档 http source
  • Android Ant项目参考

    我有一个 Android 项目 它有一个 Java 项目文件夹引用 我是用eclipse开发的 现在我想用Ant编译 我想在 build xml 中添加内容以包含引用 假设您的项目名为 HelloListview 比如说 并且您希望所有 A
  • 删除 android ListView 的底部分隔线

    我有固定的高度ListView 它在列表项之间有分隔线 但它还在最后一个列表项之后显示分隔线 有没有办法在最后一项之后不显示分隔线ListView 只需添加android footerDividersEnabled false 到您的 Li
  • HttpURLConnection.getResponseCode() 冻结执行/不会超时

    我正在编写一个 Android 应用程序 它连接到受密码保护的 cPanel 服务器 Apache 2 2 22 页面 当身份验证凭据正确时 我的连接没有问题 但是 当凭据不正确时 我的 Android 应用程序似乎会冻结在HttpURLC
  • Android:直接从浏览器下载文件

    我试图让 Android 浏览器下载特定类型 xxx 的文件 这样我就可以设置一个应用程序与其关联 我已经成功完成了关联部分 因为我已经做到了 以便在资源管理器应用程序中单击正确类型的文件会加载适当的应用程序 我希望这会转移到浏览器 这样如
  • 滑动抽屉上的按钮? - 安卓

    好吧 我已经在我正在构建的 Android 应用程序中的滑动抽屉上实现了一个按钮 唯一的问题是 当我按下按钮时 整个滑动抽屉都会被按下并向上滑动 我知道我可以在 XML 中禁用 按向上滑动 但这似乎不起作用 因为滑动抽屉仍然在没有向上滑动的
  • Android 中何时使用服务、何时不使用服务

    我从事Android开发已经不到两年了 我仍然对这个看似简单的问题感到困惑 何时应该实施一项服务 根据我的经验 有一些罕见的情况 但我对此表示怀疑 因为每部手机上都运行着很多这样的情况 我怀疑这只是一个糟糕的应用程序设计 这本质上是我的问题
  • 如何获取任何已安装 Android 应用程序的清单权限

    是否可以获得任何已安装的 Android 应用程序的清单权限 感谢您的提示 让它运行 final Intent mainIntent new Intent Intent ACTION MAIN null mainIntent addCate
  • 如何使用 Android 手机通话时播放声音?

    是否可以通过编程方式与电话进行交互 例如 您可以通过程序向呼叫者播放音频吗 Google 尚未公开任何允许我们向特定正在进行的调用提供数据的 API 不过 您可以控制通话 检查这篇文章 here http prasanta paul blo
  • 在 Android 中创建硬链接和符号链接

    我正在创建一个应用程序 我想在其中使用 Android 外部内存文件系统中的硬链接和符号链接 我尝试过使用命令 Os link oldpath newpath Os link oldpath newpath 但是 当我尝试这样做时 我收到此
  • MediaRecorder 纵向模式下的视频捕获

    我正在尝试制作自定义视频应用程序 Iwork 使用清单中的设置仅 2 2 API 8 一切顺利 但我不明白为什么纵向模式视频与横向模式视频没有区别 为了检测设备改变的方向 我在 surfaceChanged 中使用此代码 if mCamer

随机推荐

  • R 计算数据帧每一行中的字符串变量

    我有一个看起来像这样的数据框 其中每一行代表一个样本 并且重复相同的字符串 gt df V1 V2 V3 V4 V5 1 a a d d b 2 c a b d a 3 d b a a b 4 d d a b c 5 c a d c c 我
  • 如何使用 Melt() 将 pandas DataFrame 重塑为列表,从交叉表列创建索引并在其位置创建新变量?

    我有一个数据矩阵 29523 行 x 503 列 其中 3 列是索引 例如下面是一个子集 IDX1 IDX2 IDX3 1983 Q4 X Y Z 1984 Q1 X Y Z A A1 Q 10 A F NaN 110 A F NaN A
  • 使用共享首选项在主屏幕上颤动多个条件

    我有一个登录屏幕 用户登录后 他会转到工作屏幕 如果用户登录并离开应用程序并返回 我将其设置为主屏幕 使用共享首选项作为工作屏幕 但现在我有另一个屏幕女巫是停止工作屏幕 我所做的是用户转到此工作屏幕并开始工作 当他在工作屏幕上按下开始工作时
  • Pandas 可以将 Excel 组结构读取为 Multiindex 吗?

    我有一个 Excel 文件 其中有一些 大部分 很好地分组的行 我在下面构建了一个假示例 有没有办法让 Pandas 中的 read excel 生成保留此结构的多重索引 对于此示例 多重索引将有四个级别 家庭 个人 儿童 可选 投资 如果
  • 如何使用自定义 UIImage 作为 UITabBarItem Badge?

    如何添加自定义 UIImage 作为 UITabBarItem 的徽章 即 当设置 UITabbarItem 的徽章值时 它将显示 考虑子类化 UITabBarItem 并自己绘制它
  • C++ 循环未正确循环

    我有一个 20 x 20 的数组 它输出盘子的热度 我需要重复一个循环 直到数组中没有单元格的变化超过 0 1 度 我通过每次迭代刷新值 如何监视数组中任何单元格的最大变化以确定何时停止迭代 对现在我已经尝试过 但下面的输出不正确 incl
  • 字节字符串与 unicode 字符串。 Python

    你能详细解释一下Python中字节字符串和Unicode字符串之间的区别吗 我读过了this 字节码只是将源代码转换为字节数组 这是否意味着Python有自己的编码 编码格式 还是使用操作系统设置 我不明白 您能解释一下吗 谢谢你 不 Py
  • 在javascript中检索被点击元素的getAttribute

    我的网页上有很多图片 img src 1 jpg br img src 2 jpg 我正在尝试使用下面的 javascript 获取单击图像的 src var getImageName function document onclick f
  • HTTP 404 - 找不到文件 Internet Explorer V6

    我有 ang 404 代码 如果找不到该页面 它将重定向到该网站 它在火狐浏览器中运行正常 但是 当我使用 Internet Explorer v6 该网站将收到错误消息 HTTP 404 文件未找到 Internet Explore 我怎
  • Microsoft Office Access 数据库引擎无法打开或写入该文件

    我收到以下异常 Microsoft Office Access 数据库引擎无法打开或写入 文件 它已被其他用户独占打开 或者您 需要查看和写入其数据的权限 at Econ Open public partial class LBMIS1Ne
  • android 已建立的连接被主机中的软件中止

    2014 03 30 19 55 57 ddmlib An established connection was aborted by the software in your host machine java io IOExceptio
  • 如何通过为所有具有相同日期的文件创建一个存档来存档超过 7 天的文件?

    我正在寻找可以帮助我制定计划任务以自动将日志文件移动到 RAR 存档中的人 它不一定是批处理文件解决方案 如果您有其他想法请分享 我得到了它的基本代码 这是我到目前为止的批处理文件代码 C Program Files WinRAR rar
  • 如何通过我的代码访问 iPhone 的设置?

    我想要做的就是能够判断我的应用程序的用户是否使用 24 小时制 我意识到我无法设置这些设置 我只想读取它们 如果您不知道我在说什么 我希望能够读取用户在 iPhone 内置 设置 应用程序中设置的值 以灰色齿轮为图标的那个 我尝试用谷歌搜索
  • 每页的 Mat 分页器项目在 Angular 9 中不起作用

    我正在从可观察对象渲染表数据 然后将数据源分配给分页器 下一页箭头以及首页和最后一页按钮都可以使用 当我尝试更改每页的项目时 它不起作用 我尝试了 ngAfterViewInit 和页面事件调用 但它们没有任何区别 import Compo
  • 受保护的静态方法可见性

    考虑这种情况 请注意 为了简洁起见 类型和方法体已被省略 当我需要这样做时 这可以让我连接到数据 public abstract class DatabaseAccessor protected static object GetDataF
  • Perl 代码分析工具

    我需要测试 Perl 应用程序 文件操作 数据库操作等 我正在寻找 Perl 代码的配置工具 Linux 中是否有类似 gprof 的 Perl 代码分析工具 有些人可能建议使用 Devel DProf 作为最标准的方法 但如果你仔细观察
  • 仅当用户不在另一个表中时才从一个表中选择用户

    我们有两张表 用户 id name borrower 1 Peter 1 2 John 1 3 Mark 1 4 David 0 贷款 id from to amount 1 1 2 100 我需要输出 Peter 没有借过任何钱并且借款人
  • 运行带有太多空格的程序

    我有一个在命令提示符下运行良好的命令 CMD C C Program Files x86 VideoLAN VLC VLC vvv http www foo com 8085 video mp4 playlist m3u8 wmsAuthS
  • 如何递归遍历目录树并仅查找文件?

    我正在研究一个scp调用以下载远程系统上存在的文件夹 下载的文件夹有子文件夹 在这些子文件夹中有一堆文件 我想将它们作为参数传递给 python 脚本 如下所示 scp r email protected SomeName SomeName
  • 如果有新版本可用,如何强制更新 Android 应用程序?

    我正在开发一个应用程序 如果游戏商店上有新版本 我想向应用程序用户强制更新 该应用程序应该向用户显示一条对话框消息 public class ForceUpdateAsync extends AsyncTask