Java 安卓有没有办法检测cyanogenmod及其版本?

Java 安卓有没有办法检测cyanogenmod及其版本?,java,android,Java,Android,我正在开发一款需要均衡器的android媒体播放器。但是,均衡器仅在姜饼和更高版本上可用,但cyanogenmod 6修改了audioflinger以用作均衡器,因此我想检测操作系统版本。您可以读取操作系统版本属性并与之匹配: String version = System.getProperty("os.version"); if (version.contains("cyanogenmod")) { isCyanogenMode = true; } 在我的设备上,os.versio

我正在开发一款需要均衡器的android媒体播放器。但是,均衡器仅在姜饼和更高版本上可用,但cyanogenmod 6修改了audioflinger以用作均衡器,因此我想检测操作系统版本。

您可以读取操作系统版本属性并与之匹配:

String version = System.getProperty("os.version");
if (version.contains("cyanogenmod")) {
    isCyanogenMode = true;
}

在我的设备上,
os.version
2.6.37.6-cyanogenmod-01509-g8913be8

截至今天,cyanogenmod的内核在
System.getProperty(“os.version”)中不包含
cyanogenmod
关键字它类似于
3.0.64-CM-g9d16c8a
。所以我写了这个函数

private boolean isCyanogenMod(PackageManager pm) {
    boolean isCyanogenMod = false;
    String version = System.getProperty("os.version");
    BufferedReader reader = null;

    try {
        if (version.contains("cyanogenmod") || pm.hasSystemFeature("com.cyanogenmod.android")) {
            isCyanogenMod = true;
        }
        else {                
            // This does not require root
            reader = new BufferedReader(new FileReader("/proc/version"), 256);
            version = reader.readLine();

            if (version.contains("cyanogenmod")) {
                isCyanogenMod = true;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        if(reader != null) {
            try { reader.close(); } catch (IOException e) { }
        }
    }

    return isCyanogenMod;
}

这是一个老问题,但我最近想出了一个更好的解决办法,我相信

public static boolean isCyanogenMod() {
    try {
        return Class.forName("cyanogenmod.os.Build") != null;
    } catch (Exception ignored) {
    }
    return false;
}

顺便说一句,这个问题已经在这里得到了回答:也许cyanogenmod在框架中有自己的类,那么使用反射呢?或者检测audioflinger版本?我正在为普通用户制作一个应用程序,使用uname完全不是一个好主意。我已经用正确的方法更新了我的答案。你可以阅读
os.version
属性。我在这里发布了一个更详尽的答案:我可以阻止在cyanogenmod上安装我的应用程序吗?os.version和内核版本都不是好指标。内核可以很容易地调出,用户经常会这样做,这会影响这两个属性。根据我的经验,最好的解决方案是使用Build.HOST。当我尝试在Android 9上读取
/proc/version
时,我遇到了这个错误:
java.io.FileNotFoundException:/proc/version(权限被拒绝)