Правильные варианты использования для Android UserManager.isUserAGoat ()?

Я смотрел на новые API, представленные в Android 4.2. Глядя на UserManager класс I наткнулся на следующий метод:

public boolean isUserAGoat()

используется для определения того, является ли пользователь, совершающий этот вызов, объектом телепортации.

возвращает ли пользователь это решение-козу.

Как и когда это должно использоваться?

12 ответов


из них источник, метод, используемый для возврата false пока он не был изменен в API 21.

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 * @return whether the user making this call is a goat 
 */
public boolean isUserAGoat() {
    return false;
}

похоже, что метод не имеет реального использования для нас как разработчиков. Кто-то ранее заявил, что это может быть пасхальное яйцо.

в API 21 реализация была изменена, чтобы проверить, есть ли установленное приложение с пакетом com.coffeestainstudios.goatsimulator

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}

здесь источник ссылка


Я не знаю, было ли это "официальным случаем использования", но следующее выдает предупреждение на Java (что может дополнительно привести к ошибкам компиляции, если смешано с return операторы, ведущие к недостижимому коду):

while (1 == 2) { // Note that "if" is treated differently
    System.out.println("Unreachable code");
}

однако это законно:

while (isUserAGoat()) {
    System.out.println("Unreachable but determined at runtime, not at compile time");
}

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

JLS указывает if (false) не вызывает "недостижимый код" по конкретной причине, что это нарушит поддержку флагов отладки, т. е. в основном этот вариант использования (h/t @auselen). (static final boolean DEBUG = false; например).

Я заменил while на if, производя более неясный использования. Я!--18-->верить вы можете отключить свою IDE, например Eclipse, с этим поведением, но это редактирование-4 года в будущем, и у меня нет Eclipse окружающая среда для игры.


Это, похоже, внутренняя шутка в Google. Он также показан в диспетчере задач Google Chrome. У него нет никакой цели, кроме того, что некоторые инженеры находят его забавным. Что само по себе является целью, если хотите.

  1. в Chrome, откройте Диспетчер задач с Shift+Esc.
  2. Правой Кнопкой Мыши, чтобы добавить

дополняя @djechlin ответ (хороший ответ кстати!), этот вызов функции может быть и используется в качестве фиктивного кода для удержания точки останова в IDE, когда вы хотите остановиться на определенной итерации или конкретном рекурсивном вызове, например:

enter image description here

isUserAGoat() может использоваться вместо объявления фиктивной переменной, которое будет отображаться в IDE в качестве предупреждения и, в частном случае Eclipse, засорит отметку точки останова, что затрудняет его включение / выключение. Если метод используется как соглашение, все вызовы могут быть позже отфильтрованы некоторым скриптом (возможно, на этапе фиксации?).

enter image description here

Google guys-тяжелые пользователи Eclipse (они предоставляют несколько своих проектов в качестве плагинов Eclipse: Android SDK, GAE и т. д.), Поэтому ответ @djechlin и этот дополнительный ответ имеют большой смысл (по крайней мере для меня).


в каждой версии Android есть забавный именованный метод/константа/что угодно.

единственное практическое применение, которое я когда-либо видел, было в последнем вызове для Google I / O конкурс, где они спросили, что это было для конкретной версии, чтобы увидеть, если конкурсанты читают отчет API diff для каждого выпуска. У конкурса также были проблемы с программированием, но, как правило, некоторые мелочи, которые можно было автоматически оценить сначала, чтобы получить количество представлений до разумных сумм, которые будут будет легче проверить.


в дисциплине распознавания речи, пользователи делятся на Козлов и овцы.

например, здесь на стр. 89:

овцы-это люди, для которых распознавание речи работает исключительно хорошо, а козы-люди, для которых оно работает исключительно плохо. Только распознаватель голоса знает, что их разделяет. Люди не могут предсказать, чей голос будет легко распознан, а чей-нет. Лучшая политика-разработать интерфейс, чтобы он мог обрабатывать все виды голосов во всех видах сред

возможно, в будущем планируется отметить пользователей Android как коз, чтобы иметь возможность настроить механизм распознавания речи для потребностей коз. ;-)


Google имеет серьезную симпатию к козам и козам на основе пасхальные яйца. Там даже было предыдущие сообщения переполнения стека об этом.

Как упоминалось в предыдущих сообщениях, он также существует в диспетчере задач Chrome (он впервые появился в дикой природе в 2009 году):

<message name="IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN" desc="The goats teleported column">
    Goats Teleported
</message>

а затем в Windows, Linux и Mac версиях Chrome в начале 2010). Количество "Телепортированных коз" на самом деле случайные:

 int TaskManagerModel::GetGoatsTeleported(int index) const {
     int seed = goat_salt_ * (index + 1);
     return (seed >> 16) & 255;
 }

другие ссылки Google на коз включают в себя:

самая ранняя корреляция коз и Google принадлежит оригинальному сообщению в блоге "косить с козами", насколько я могу судить.

мы можем с уверенностью предположить, что это просто пасхальное яйцо и не имеет никакого реального использования, кроме возвращения false.


по состоянию на API 21 (первый Android 5.0/Lollipop SDK), это определяет, является ли Симулятор Козла приложение:

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}

Это должно дать понять, что djechlin предложение использовать его в качестве предупреждения-бесплатно if (false) - потенциально катастрофическая стратегия. Что ранее вернулось false для каждого устройства теперь возвращает, казалось бы, случайное значение: если это было похоронено достаточно глубоко в вашем коде, это может занять долго время, чтобы выяснить, откуда появляются новые ошибки.

итог: если вы не контролируете реализацию метода и решаете использовать его для целей, отличных от указанных в документации API, вы попадаете в беду.


есть аналогичный вызов,isUserAMonkey(), который возвращает true, если MonkeyRunner инструмент используется. Объяснение SDK так же любопытно, как и это.

public static boolean isUserAMonkey(){}     

возвращает true если пользовательский интерфейс в настоящее время связался с обезьяной.

здесь источник.

Я ожидаю, что это было добавлено в ожидании нового SDK инструмент назвал что-то с козой и будет на самом деле быть функциональным, чтобы проверить наличие этого инструмента.

Также см. аналогичный вопрос,странная функция в ActivityManager: isUserAMonkey. Что это значит, в чем его польза?.


enter image description here

в самых отдаленных горах планеты лежит продвинутый вид козы, который, похоже, в настоящее время может использовать телефоны, как и мы, люди!

просочились кадры:youtu.be / YJwZMUn7GdQ

enter image description here

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


Забавное Пасхальное Яйцо.
В Ubuntu версии Chrome, в Диспетчере задач ( shift+esc), С правой кнопкой мыши вы можете добавить научно-фантастический столбец, который в итальянской версии является "Capre Teletrasportate" (Телепортированные козы).

забавная теория об этом здесь.


пожалуйста, смотрите ниже исходный код :

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}