java - Geeignete Anwendungsfälle für Android UserManager.isUserAGoat()?



(11)

Ich habe mir die neuen APIs von Android 4.2 angesehen . Beim Betrachten der UserManager Klasse bin ich auf folgende Methode UserManager :

public boolean isUserAGoat()

Wird verwendet, um zu bestimmen, ob der Benutzer, der diesen Anruf tätigt, Teleportationen unterliegt.

Gibt zurück, ob der Benutzer, der diesen Aufruf durchführt, eine Ziege ist.

Wie und wann sollte dies verwendet werden?


Answers

Bitte sehen Sie den folgenden Quellcode:

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

Ab API 21 (dem ersten Android 5.0 / Lollipop-SDK) erkennt dies, ob die Goat Simulator- App installiert ist:

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

Dies sollte deutlich machen, dass der Vorschlag von Djechlin , es als warnungsfrei zu verwenden, if (false) eine potenziell katastrophale Strategie ist. Was zuvor für jedes Gerät als false , gibt nun einen scheinbar zufälligen Wert zurück: Wenn dieser Code tief genug in Ihrem Code verankert ist, kann es lange dauern, um herauszufinden, woher Ihre neuen Fehler kommen.

Fazit: Wenn Sie die Implementierung einer Methode nicht kontrollieren und entscheiden, sie zu anderen als den in der API-Dokumentation angegebenen Zwecken zu verwenden, suchen Sie nach Ärger.


In den entlegensten Bergen der Erde liegt eine fortschrittliche Ziegenart, die derzeit wie wir Menschen Handys zu benutzen scheint!

Durchgesickertes Material: youtu.be/YJwZMUn7GdQ

Google muss dies erkannt und beschlossen haben, sie zu unterstützen, um zu versuchen, an vorderster Front des technologischen Fortschritts zu bleiben.


Von ihrer source wurde die zurückgegebene Methode zurückgegeben, bis sie in API 21 geändert wurde.

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

Es sieht so aus, als ob die Methode für uns als Entwickler keinen wirklichen Nutzen hat. Jemand hat zuvor erklärt, dass es ein Osterei sein könnte.

In API 21 wurde die Implementierung geändert, um zu prüfen, ob eine installierte App mit dem Paket 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");
}

Hier ist der Quelllink


Als Ergänzung zur @djechlin- answer (übrigens gute Antwort!) Kann dieser Funktionsaufruf auch als Dummy-Code zum Halten eines Haltepunkts in einer IDE verwendet werden, wenn Sie in einer bestimmten Iteration oder einem bestimmten rekursiven Aufruf anhalten möchten, beispielsweise:

isUserAGoat() könnte anstelle einer Dummy-Variablendeklaration verwendet werden, die in der IDE als Warnung angezeigt wird, und im Eclipse-Fall wird die Haltepunktmarkierung verstopft, was das Aktivieren / Deaktivieren der Markierung erschwert. Wenn die Methode als Konvention verwendet wird, können alle Aufrufe später durch ein Skript (möglicherweise während der Festschreibungsphase?) Gefiltert werden.

Google-Jungs sind starke Eclipse-Nutzer (sie stellen mehrere ihrer Projekte als Eclipse-Plugins bereit: Android SDK, GAE usw.), sodass die @ djechlin-Antwort und diese ergänzende Antwort (zumindest für mich) sehr sinnvoll sind.


Google hat eine große Vorliebe für Ziegen und Ostereier auf Ziegenbasis. Es gab sogar schon frühere Beiträge zum .

Wie bereits in früheren Beiträgen erwähnt, gibt es ihn auch im Chrome-Task-Manager ( er erschien erstmals 2009 in freier Wildbahn ):

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

Und dann in Windows-, Linux- und Mac-Versionen von Chrome Anfang 2010 ). Die Anzahl der "Ziegen-Teleportierten" ist tatsächlich zufällig :

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

Andere Verweise von Google auf Ziegen umfassen:

Die früheste Korrelation von Ziegen und Google gehört, soweit ich das beurteilen kann, in den ursprünglichen Blogbeitrag "Mähen mit Ziegen".

Wir können sicher davon ausgehen, dass es sich lediglich um ein Osterei handelt und keinen Gebrauch in der realen Welt hat, außer, dass es false .


Ich weiß nicht, ob dies "der" offizielle Anwendungsfall war, aber der folgende Befehl erzeugt eine Warnung in Java (die zu Kompilierungsfehlern führen kann, wenn sie mit return Anweisungen gemischt wird, was zu nicht erreichbarem Code führt):

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

Dies ist jedoch legal:

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

Daher schreibe ich oft eine dumme Hilfsmethode für den schnellsten Weg, um einen Codeblock auszublenden, und finde dann beim Beenden des Debuggens alle Aufrufe desselben, sofern sich die Implementierung nicht ändert, kann dies jedoch dafür verwendet werden.

JLS weist darauf hin, if (false) keinen "unerreichbaren Code" aus dem bestimmten Grund auslöst, aus dem die Unterstützung für Debug-Flags, dh im Wesentlichen dieser Anwendungsfall (h / t @auselen), unterbrochen würde. ( static final boolean DEBUG = false; zum Beispiel).

Ich habe while für if , wodurch ein eher obskurer Anwendungsfall entsteht. Ich glaube, Sie können mit diesem Verhalten Ihre IDE wie Eclipse auf den Kopf stellen, aber diese Bearbeitung ist 4 Jahre in der Zukunft, und ich habe keine Eclipse-Umgebung, mit der ich spielen kann.


Dies scheint ein Insider-Witz bei Google zu sein. Es ist auch im Google Chrome-Aufgabenmanager enthalten. Es hat keinen Zweck, außer einigen Ingenieuren, die es amüsant finden. Welches ist ein Zweck für sich, wenn Sie so wollen.

  1. Öffnen Sie in Chrome den Task-Manager mit Umschalt + Esc .
  2. Klicken Sie mit der rechten Maustaste, um die Spalte Goats Teleported hinzuzufügen.
  3. Wunder.

Es gibt sogar einen riesigen Chrom-Fehlerbericht über zu viele teleportierte Ziegen .

Das folgende Chromium- Quellcode-Snippet wurde aus den HN Kommentaren gestohlen.

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

In der Disziplin der Spracherkennung werden die Benutzer in Ziegen und Schafe unterteilt.

Zum Beispiel hier auf Seite 89 :

Schafe sind Menschen, für die die Spracherkennung außerordentlich gut funktioniert, und Ziegen sind Menschen, für die sie außergewöhnlich schlecht arbeitet. Nur der Spracherkenner weiß, was sie voneinander unterscheidet. Leute können nicht vorhersagen, wessen Stimme leicht erkannt wird und wem nicht. Die beste Richtlinie besteht darin, die Benutzeroberfläche so zu gestalten, dass sie mit allen Arten von Stimmen in allen Arten von Umgebungen umgehen kann

Möglicherweise ist geplant, Android-Benutzer in Zukunft als Ziegen zu kennzeichnen, um die Spracherkennungs-Engine für Ziegenbedürfnisse konfigurieren zu können. ;-)


Es gibt einen ähnlichen Aufruf, isUserAMonkey() , der true zurückgibt, wenn das MonkeyRunner-Tool verwendet wird. Die SDK-Erklärung ist genauso merkwürdig wie diese.

public static boolean isUserAMonkey(){}     

Gibt " true wenn die Benutzeroberfläche gerade von einem Affen verwirrt wird.

Here ist die Quelle.

Ich gehe davon aus, dass dies in Erwartung eines neuen SDK Tools mit dem Namen etwas mit einer Ziege hinzugefügt wurde und tatsächlich funktionieren wird, um das Vorhandensein dieses Tools zu testen.

Siehe auch eine ähnliche Frage, Strange-Funktion in ActivityManager: isUserAMonkey. Was bedeutet das, was nutzt es? .


Context means current. Context use to do operation for current screen. Ex.
1. getApplicationContext()
2. getContext()

Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();




java android usermanager