如何确定我的应用是否在Android上运行

时间:2010-12-23 14:24:01

标签: java android

我有一个应用程序,运行在运行Fedora或Android的几个移动设备上。为了巩固我的代码库和分发,我想确定我在哪个操作系统上。我尝试了System.getProperty(“os.name”),但只返回“Linux”。系统属性中是否有Android独有的东西? 感谢

5 个答案:

答案 0 :(得分:22)

您可以查看几个属性。候选人是:

  • java.vendor.url - > http://www.android.com
  • java.vm.name - > Dalvik(我不知道,Fedora正在使用哪一个......)
  • java.vm.vendor - > Android项目
  • java.vendor - > 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);
   }

答案 1 :(得分:6)

我不知道Android但是如果你没有找到一些独特的系统属性,你有时可以识别系统,如果存在某些特定的类。所以你可以做到以下几点:

boolean isAndroid() {
    try {
        Class.forName("the class name");
        return true;
    } catch(ClassNotFoundException e) {
        return false;
    }
}

答案 2 :(得分:3)

以下是我使用此页面中的信息编写的一些代码,以防您要复制粘贴:

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;
}

答案 3 :(得分:2)

已定义系统属性的列表在这里:https://developer.android.com/reference/java/lang/System#getProperties()

我正在使用

boolean android = "The Android Project".equals(System.getProperty("java.specification.vendor"));

答案 4 :(得分:0)

我在加工草图中使用它来确定我以哪种模式运行,即我在哪里运行。

enum Mode {
  java, android
}

Mode getMode() {
  return (System.getProperty("java.runtime.name") == "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
}