Как определить, работает ли мое приложение на Android

У меня есть приложение, которое работает на нескольких мобильных устройствах, работающих под управлением Fedora или Android. Чтобы консолидировать свою кодовую базу и дистрибутив, я бы хотел определить, на какой ОС я работаю. Я попробовал System.getProperty( "os.name" ), но это просто возвращает "Linux". Есть ли что-то уникальное для Android в свойствах системы? Благодаря

Ответы

Ответ 1

Есть несколько свойств, которые вы можете проверить. Кандидаты:

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

Ответ 2

Я не знаю Android, но если вы не найдете уникального системного свойства, вы можете иногда идентифицировать систему, если там существует определенный класс. Таким образом, вы можете сделать следующее:

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

Ответ 3

Вот некоторый код, который я написал, используя информацию с этой страницы, на случай, если вы хотите скопировать и вставить:

private static YLogger ylogger;
public static YLogger getLogger() {
    if (ylogger == null){
        // need to find a new logger. Let 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;
}

Ответ 5

Я использую это в своем эскизе обработки, чтобы определить, в каком режиме я работаю, т.е. где я его запускаю.

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
}