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