it-swarm.com.de

Richtige Anwendungsfälle für Android UserManager.isUserAGoat ()?

Ich habe mir die neuen APIs angesehen, die in Android 4.2 ..__ eingeführt wurden. Beim Betrachten der UserManager Klasse bin ich auf die folgende Methode gestoßen:

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?

3311
Ovidiu Latcu

Von ihrem source die Methode, die verwendet wurde, um false zurückzugeben, 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 sich um ein Osterei handeln kann.

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

Hier ist die Quelle und die Änderung .

1623
meh

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. Wenn Sie das Debuggen abgeschlossen haben, finden Sie alle Aufrufe desselben, sofern sich die Implementierung nicht ändert, und dies kann dafür verwendet werden.

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

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

945
djechlin

Dies scheint ein Insider-Witz bei Google zu sein. Es wird auch im Google Chrome-Task-Manager angezeigt. Es hat keinen Zweck, außer dass einige Ingenieure es amüsant finden. Welches ist ein Zweck für sich, wenn man so will.

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

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

chrome

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;
}
733
user479870

Als Ergänzung zum @djechlin answer (gute Antwort übrigens!) Könnte dieser Funktionsaufruf auch sein, der als Dummy-Code verwendet wird, um einen Haltepunkt in einem IDE zu halten, wenn Sie einen Stopp machen möchten bestimmte Iteration oder einen bestimmten rekursiven Aufruf, zum Beispiel:

enter image description here

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.

enter image description here

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.

270
higuaro

In jeder Android-Version gibt es eine lustige benannte Methode/Konstante/was auch immer. 

Die einzige praktische Anwendung, die ich je gesehen habe, war im Last Call for Google I/O Contest, wo sie gefragt wurden, was für eine bestimmte Version es ist, um zu sehen, ob die Teilnehmer den API-Diff-Bericht für jedes Release lesen. Der Wettbewerb hatte auch Programmierprobleme, aber im Allgemeinen einige Kleinigkeiten, die zuerst automatisch bewertet werden konnten, um die Anzahl der Einsendungen auf vernünftige Beträge zu bringen, die einfacher zu überprüfen wären.

130
Lance Nanek

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ßergewöhnlich 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. ;-)

119
rainer198

Ab API 21 (das erste Android 5.0/Lollipop SDK) erkennt dies, ob die App Goat Simulator 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 Djechlins Vorschlag die Verwendung als warnfreies if (false) eine potenziell katastrophale Strategie ist. Was zuvor false für jedes Gerät zurückgegeben hat, gibt jetzt einen scheinbar zufälligen Wert zurück: Wenn dieser tief genug in Ihrem Code vergraben wäre, könnte es einen langen Zeit herauszufinden, wo deine neuen Bugs herkommen.

Fazit: Wenn Sie die Implementierung einer Methode nicht kontrollieren und sie für andere als die in der API-Dokumentation angegebenen Zwecke verwenden, treten Probleme auf.

114
Mark Whitaker

Google hat eine große Vorliebe für Ziegen und Ziegen Ostereier . Es gab sogar vorherige Stack Overflow-Beiträge

Wie bereits in früheren Beiträgen erwähnt, gibt es ihn auch im Chrome-Task-Manager ( 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 random :

 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 keine Verwendung in der realen Welt hat, außer dass false zurückgegeben wird.

113
rickyduck

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

public static boolean isUserAMonkey(){}     

Gibt true zurück, wenn die Benutzeroberfläche gerade von einem Affen durcheinander gebracht wird.

Hier ist die Quelle. 

Ich gehe davon aus, dass dies in Erwartung eines neuen SDK - Werkzeugs mit einer Ziege hinzugefügt wurde und eigentlich funktional sein wird, um das Vorhandensein dieses Werkzeugs zu testen. 

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

100
KDEx

 enter image description here

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

Durchgesickertes Material: youtu.be/YJwZMUn7GdQ

 enter image description here

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

59
Sergio Carneiro

Lustiges Osterei.
In der Ubuntu-Version von Chrome im Task-Manager (shift+esc) können Sie mit einem Rechtsklick eine Sci-Fi-Spalte hinzufügen, die in der italienischen Version "Capre Teletrasportate" (Teleported Goats) lautet.

Eine lustige Theorie dazu ist hier .

35
j.c

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");
}
1
Koustuv Ganguly

Es ist kein Insider-Witz Anscheinend ist es nur ein Anwendungsprüfer für Goat Simulator - von Coffee Stain Studios

Wenn Sie einen Ziegensimulator installiert haben, ist Ihr eine Ziege. Wenn Sie ihn nicht installiert haben, ist er keine Ziege.

Ich kann mir vorstellen, dass es eher ein persönliches Experiment eines Entwicklers war, höchstwahrscheinlich ein soziales Experiment, um Leute mit einem gemeinsamen Interesse zu finden.

0
Zillinium