Android - 两个android版本名称之间的字符串比较

标签 android

由于 android 版本名称是字符串数据类型,我想将我设备上现有的 apk 与新的 apk 更新版本名称进行比较。我知道如何以编程方式获取版本名称并且我有两个版本名称但是两个版本名称之间的字符串比较没有显示正确的结果

if ( oldVersionName.compareTo( newVersionName ) < 0 ) {
}

此 compareTo 在 1.0.9 和 1.0.12、1.0.9 和 1.0.10 等少数情况下不起作用。

请给我关于如何以编程方式比较两个字符串版本名称的解决方案?谢谢!

最佳答案

您可以使用以下方法获取 Android 版本的“int 形式”

 Build.VERSION.SDK_INT

无论如何,如果您只有“点符号”形式的版本名称,您可以通过“.”拆分字符串。 char,并逐个迭代进行比较。在我的脑海中,它看起来像。-

public int compareVersionNames(String oldVersionName, String newVersionName) {
    int res = 0;

    String[] oldNumbers = oldVersionName.split("\\.");
    String[] newNumbers = newVersionName.split("\\.");

    // To avoid IndexOutOfBounds
    int maxIndex = Math.min(oldNumbers.length, newNumbers.length);

    for (int i = 0; i < maxIndex; i ++) {
        int oldVersionPart = Integer.valueOf(oldNumbers[i]);
        int newVersionPart = Integer.valueOf(newNumbers[i]);

        if (oldVersionPart < newVersionPart) {
            res = -1;
            break;
        } else if (oldVersionPart > newVersionPart) {
            res = 1;
            break;
        }
    }

    // If versions are the same so far, but they have different length...
    if (res == 0 && oldNumbers.length != newNumbers.length) {
        res = (oldNumbers.length > newNumbers.length)?1:-1;
    }

    return res;
}

只是没有尝试就写了,所以肯定可以优化,但这只是一个开始。

关于Android - 两个android版本名称之间的字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18699569/

相关文章:

Android 以不同的分辨率/密度对齐 ImageViews

java - 除了测试,为什么我们需要 Dagger 2?

android - 如何将填充添加到我们通过单击微调器获得的下拉列表中?

android - 在 Windows 操作系统的 Cygwin 下为 Android 构建 FFMPEG

android - 构建本地单元测试(未注册仪器!必须在注册仪器下运行)

android - 从 ImageView 获取 ID 并在点击时设置为墙纸

android - android中动态添加textView到gridView

android - Kotlin 是否有办法将接口(interface)的实现委托(delegate)给另一个类?

android - 如何在 manifest.json 中指定图标?

android - 如何从android中的listView onItemClick获取项目?