我有一个运行在多个移动设备上的应用程序,这些设备运行着Fedora或Android操作系统。为了合并我的代码库和发布版本,我想要确定当前设备的操作系统。我尝试过使用System.getProperty("os.name"),但它只返回“Linux”。在System属性中,是否有一些特定于Android的属性可以用来区分操作系统?
你可以检查几个属性。候选属性包括:
也许你想自己检查一下?
Properties p = System.getProperties();
Enumeration keys = p.keys();
while(keys.hasMoreElements()) {
String key = (String) keys.nextElement();
String value = (String) p.get(key);
System.out.println(key + " >>>> " + value);
}
System.getProperties().list(System.out);
翻译:打印系统属性到控制台。 - Julian Fondren我不了解安卓系统,但如果你找不到某些独特的系统属性,有时可以通过检测是否存在某些特定的类来确定该系统。因此,您可以执行以下操作:
boolean isAndroid() {
try {
Class.forName("the class name");
return true;
} catch(ClassNotFoundException e) {
return false;
}
}
android.os.Build
类来实现这个方法 - 这是Android应用程序预期检查不同Android平台配置的类,请参见https://developer.android.com/reference/android/os/Build。因此,如果您的应用程序想要了解的不仅是它是否为Android,而且还想知道正在运行的Android类型,则实际上需要获取到 Build
的类引用。 - Gussjava.lang.instrument.ClassFileTransformer
(自 Java 5 起)。 - neuralmer以下是我根据此页面的信息编写的一些代码,以防您想要复制粘贴:
private static YLogger ylogger;
public static YLogger getLogger() {
if (ylogger == null){
// need to find a new logger. Let's check if we have Android running
if (System.getProperty("java.vm.name").equalsIgnoreCase("Dalvik")){
ylogger = new AndroidLogger();
ylogger.d("YLoggerFactory", "Instantiating Android-based logger");
} else {
// fallback option, system logger.
ylogger = new SystemLogger();
ylogger.d("YLoggerFactory", "Instantiating System-based logger");
}
}
return ylogger;
}
boolean isAndroid;
try {
Class.forName("android.app.Activity");
isAndroid = true;
} catch (ClassNotFoundException e) {
isAndroid = false;
}
- jasxirboolean android = "The Android Project".equals(System.getProperty("java.specification.vendor"));
我在我的处理程序草图中使用这个来确定我正在运行的模式,即我在哪里运行它。
enum Mode {
java, android
}
Mode getMode() {
return System.getProperty("java.runtime.name").equals("Android Runtime") ? Mode.android : Mode.java;
}
if (getMode() == Mode.java){
// do something
// eg: do something that android can't handle
} else {
// do android stuff
// eg: scale the sketch by 2 to improve visibility
}
null
,这是大多数答案依赖的。那些不依赖于Apache Commons的答案没有检查Android。 - TheWanderer