Как определить, работает ли мое приложение на 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;
}
Ответ 4
Список определенных системных свойств находится здесь: https://developer.android.com/reference/java/lang/System#getProperties()
я использую
boolean android = "The Android Project".equals(System.getProperty("java.specification.vendor"));
Ответ 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
}