Właściwe przypadki użycia dla Androida UserManager.isUserAGoat()?

Patrzyłem na nowe Api wprowadzone w Android 4.2 . Patrząc na UserManager klasa i natknęła się na następującą metodę:

public boolean isUserAGoat()

Używany do określenia, czy użytkownik wykonujący to połączenie podlega teleportacji.

Zwraca, czy użytkownik wykonujący to wywołanie jest kozą.

Jak i kiedy należy to wykorzystać?

Author: Luca Kiebel, 2012-11-14

12 answers

Z ich źródło, metoda używana do zwracania false dopóki nie została zmieniona w 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;
}

Wygląda na to, że ta metoda nie ma realnego zastosowania dla nas jako programistów. Ktoś wcześniej stwierdził, że może to być Easter egg.

W API 21 implementacja została zmieniona, aby sprawdzić, czy jest zainstalowana aplikacja z pakietem 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");
}

Oto link źródłowy

 1551
Author: meh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-05 20:04:54

Nie wiem, czy był to "oficjalny przypadek użycia", ale poniższy przypadek generuje ostrzeżenie w Javie (które może dodatkowo powodować błędy kompilacji, jeśli zostanie zmieszane z instrukcjami return, co prowadzi do nieosiągalnego kodu):

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

Jednak jest to legalne:

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

Więc często znajduję się pisząc głupią metodę narzędziową dla najszybszego sposobu na dummy out bloku kodu, a następnie w zakończeniu debugowania znaleźć wszystkie wywołania do niego, więc pod warunkiem, że implementacja nie zmieni to może być używane do to.

JLS wskazuje if (false) nie uruchamia "nieosiągalnego kodu" ze względu na konkretny powód, dla którego złamałoby to obsługę FLAG debugowania, tj. zasadniczo ten przypadek użycia (h/t @auselen). (static final boolean DEBUG = false; na przykład).

Zastąpiłem while na if, tworząc bardziej niejasny przypadek użycia. I } wierzę można potknąć się IDE, jak Eclipse, z tym zachowaniem, ale ta edycja jest 4 lata w przyszłość, I nie mam środowiska Eclipse grać z.

 930
Author: djechlin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-12 21:13:44

To chyba jakiś żart w Google. Jest również opisywany w Menedżerze Zadań Google Chrome. To nie ma żadnego celu, poza tym, że niektórzy inżynierowie uważają to za Zabawne. Co jest celem samym w sobie, jeśli chcesz.

  1. W Chrome otwórz Menedżera zadań za pomocą Shift+Esc .
  2. Kliknij prawym przyciskiem myszy, aby dodać kolumnę Goats Teleported.
  3. Cudo.

Jest nawet ogromny błąd Chromium o zbyt wielu teleportowanych kozy .

chrome

Poniższy fragment kodu źródłowego chromu został skradziony z komentarzy HN .

int TaskManagerModel::GetGoatsTeleported(int index) const {
  int seed = goat_salt_ * (index + 1);
  return (seed >> 16) & 255;
}
 718
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-15 01:06:47

Uzupełniając @djechlin Odpowiedź (przy okazji dobra odpowiedź!funkcja ta może być również używana jako atrapa kodu do przechowywania punktu przerwania w IDE, gdy chcesz zatrzymać się w jakiejś konkretnej iteracji lub konkretnym wywołaniu rekurencyjnym, na przykład:

Tutaj wpisz opis obrazka

isUserAGoat() może być użyta zamiast atrapy deklaracji zmiennej, która będzie wyświetlana w IDE jako Ostrzeżenie i, w szczególnym przypadku Eclipse, zatyka znak punktu przerwania, co utrudnia włączenie/wyłączenie to. Jeśli metoda jest używana jako Konwencja, wszystkie wywołania mogą być później filtrowane przez jakiś skrypt(może w fazie commit?).

Tutaj wpisz opis obrazka

Google guys są ciężkimi użytkownikami Eclipse (dostarczają kilka swoich projektów jako wtyczki Eclipse: Android SDK, GAE, itp.), więc odpowiedź @djechlin i ta komplementarna odpowiedź mają dużo sensu (przynajmniej dla mnie).

 264
Author: higuaro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:59

W każdej wersji Androida jest zabawna nazwa metody/stała/cokolwiek.

Jedynym praktycznym zastosowaniem, jaki kiedykolwiek widziałem, było ostatnie wezwanie do Google I/O Contest, gdzie pytali, co to jest dla konkretnej wersji, aby sprawdzić, czy uczestnicy czytają raport różnic API dla każdego wydania. Konkurs miał też problemy z programowaniem, ale generalnie kilka ciekawostek, które można było Oceniać automatycznie, aby zmniejszyć liczbę zgłoszeń do rozsądnych kwot, które byłyby łatwiejsze do szach.

 127
Author: Lance Nanek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-10 02:46:25

W dyscyplinie rozpoznawania mowy użytkownicy dzielą się na kozy i Owce .

Na przykład tutaj na stronie 89:

Owce to ludzie, dla których rozpoznawanie mowy działa wyjątkowo dobrze, a kozy to ludzie, dla których rozpoznawanie mowy działa wyjątkowo źle. Tylko rozpoznawacz głosowy wie, co je dzieli. Ludzie nie potrafią przewidzieć, czyj głos zostanie łatwo rozpoznany, a czyj Nie. najlepszą polityką jest zaprojektowanie interfejsu dzięki temu może obsługiwać wszystkie rodzaje głosów we wszystkich środowiskach

Być może planowane jest oznaczenie użytkowników Androida jako kóz w przyszłości, aby móc skonfigurować silnik rozpoznawania mowy dla potrzeb kóz. ;-)

 115
Author: rainer198,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-12 21:16:35

Google bardzo lubi kozy i kozy na bazie pisanki . Nie było nawet poprzednie posty o przepełnieniu stosu.

Jak wspomniano w poprzednich postach, istnieje również w Menedżerze Zadań Chrome (po raz pierwszy pojawił się w dziczy w 2009):

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

A następnie w Windows, Linux i Mac wersje Chrome początku 2010). Liczba "Teleportowanych kóz" jest w rzeczywistości random :

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

Inne Google odniesienia do Kóz obejmują:

Najwcześniejsza korelacja kóz i Google należy do oryginalnego wpisu na blogu "koszenie z kozami", o ile mogę powiedzieć.

Możemy bezpiecznie założyć, że jest to tylko Pisanka i nie ma żadnego użytku w świecie rzeczywistym, z wyjątkiem zwrotu false.

 110
Author: rickyduck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:32

Od API 21 (pierwszy Android 5.0/Lollipop SDK) , wykrywa, czy aplikacja Goat Simulator jest zainstalowana:

/**
 * 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");
}

Powinno to wyjaśnić, że sugestia djechlina użycia go jako wolnego od ostrzeżeń if (false) jest potencjalnie katastrofalną strategią. To, co wcześniej zwróciło false dla każdego urządzenia, TERAZ Zwraca pozornie losową wartość: jeśli została ona wystarczająco głęboko ukryta w Twoim kodzie, może zająć długo czas, aby dowiedzieć się, gdzie są twoje nowe błędy pochodzę z.

Podsumowując: jeśli nie kontrolujesz implementacji metody i zdecydujesz się użyć jej do celów innych niż określone w dokumentacji API, będziesz miał kłopoty.

 105
Author: Mark Whitaker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-20 10:30:07

Istnieje podobne wywołanie isUserAMonkey(), które zwraca true, jeśli używane jest narzędzie MonkeyRunner . Wyjaśnienie SDK jest tak samo ciekawe jak to.

public static boolean isUserAMonkey(){}     

Zwraca true Jeśli interfejs użytkownika jest aktualnie namieszany przez małpę.

Tutaj jest źródło.

Spodziewam się, że zostało to dodane w oczekiwaniu na nowe narzędzie SDK o nazwie coś z kozą i będzie faktycznie być funkcjonalne do testowania dla obecność tego narzędzia.

Zobacz też podobne pytanie, dziwna funkcja w ActivityManager: isUserAMonkey. Co to oznacza, jakie jest jego zastosowanie?.
 96
Author: KDEx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:36

Tutaj wpisz opis obrazka

W najbardziej odległych górach planety, leży zaawansowany gatunek kóz, które wydają się być obecnie w stanie korzystać z telefonów, Tak jak my ludzie!

Youtu.be/YJwZMUn7GdQ

Tutaj wpisz opis obrazka

Google musiało to zauważyć i postanowiło zapewnić im wsparcie, próbując pozostać na pierwszej linii postępu technologicznego.

 54
Author: Sergio Carneiro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-30 14:00:20

Śmieszne Pisanki.
W wersji Ubuntu Chrome w Menedżerze Zadań (shift+esc), klikając prawym przyciskiem myszy możesz dodać kolumnę sci-fi, która w wersji włoskiej jest "Capre Teletrasportate" (Teleportowane Kozy).

Zabawna teoria o tym jest tutaj .

 31
Author: j.c,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-21 11:38:48

Zobacz poniższy kod źródłowy:

/**
 * 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");
}
 0
Author: Koustuv Ganguly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-28 13:49:47