java - Cas d'utilisation appropriés pour Android UserManager.isUserAGoat()?




(11)

Je regardais les nouvelles API introduites dans Android 4.2 . En regardant la classe UserManager , je suis tombé sur la méthode suivante:

public boolean isUserAGoat()

Utilisé pour déterminer si l'utilisateur effectuant cet appel est sujet à des téléportations.

Indique si l'utilisateur effectuant cet appel est une chèvre.

Comment et quand cela devrait-il être utilisé?


Answers

Depuis leur source , la méthode utilisée pour renvoyer false jusqu'à ce qu'elle soit modifiée dans l'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;
}

Il semble que la méthode ne soit pas vraiment utile pour nous en tant que développeurs. Quelqu'un a déjà déclaré qu'il pourrait s'agir d'un oeuf de Pâques .

Dans l'API 21, l'implémentation a été modifiée pour vérifier s'il existe une application installée avec le package 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");
}

Voici le lien source


S'il vous plaît voir le code source ci-dessous:

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

Dans les montagnes les plus reculées de la planète, se trouve une espèce de chèvre avancée qui semble être en mesure d'utiliser un téléphone, tout comme nous, les humains!

Images perdues: youtu.be/YJwZMUn7GdQ

Google doit avoir repéré cela et décidé de leur fournir un soutien, afin de rester à la pointe du progrès technologique.


Dans la discipline de la reconnaissance vocale, les utilisateurs sont divisés en chèvres et moutons .

Par exemple, ici à la page 89 :

Les moutons sont des personnes pour qui la reconnaissance vocale fonctionne exceptionnellement bien, et les chèvres sont des personnes pour qui cela fonctionne exceptionnellement mal. Seul le système de reconnaissance vocale sait ce qui les sépare. Les gens ne peuvent pas prédire quelle voix sera reconnue et qui ne le sera pas. La meilleure politique consiste à concevoir l'interface de manière à ce qu'elle puisse gérer toutes sortes de voix dans tous types d'environnements

Peut-être qu’il est prévu de marquer les utilisateurs d’Android comme des chèvres à l’avenir afin de pouvoir configurer le moteur de reconnaissance vocale pour les besoins des chèvres. ;-)


Il existe un appel similaire, isUserAMonkey() , qui renvoie la valeur true si l’ outil MonkeyRunner est utilisé. L'explication du SDK est aussi curieuse que celle-ci.

public static boolean isUserAMonkey(){}     

Renvoie true si l'interface utilisateur est en train d'être gâchée par un singe.

Here la source.

Je suppose que cela a été ajouté en prévision d'un nouvel outil SDK nommé quelque chose avec une chèvre et qu'il sera en fait fonctionnel pour tester la présence de cet outil.

Voir également une question similaire, Fonction étrange dans ActivityManager: isUserAMonkey. Qu'est-ce que cela signifie, à quoi sert-il? .


Cela semble être une blague à l'intérieur de Google. Il figure également dans le gestionnaire de tâches de Google Chrome. Cela n'a aucun but, sauf que certains ingénieurs trouvent cela amusant. Ce qui est un but en soi, si vous voulez.

  1. Dans Chrome, ouvrez le gestionnaire de tâches avec Maj + Échap .
  2. Cliquez avec le bouton droit pour ajouter la colonne Goats Teleported .
  3. Merveille.

Il existe même un énorme rapport de bogue sur Chromium concernant trop de chèvres téléportées .

L' extrait de code source Chromium suivant est volé dans les commentaires HN .

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

Oeuf de Pâques drôle.
Dans la version Ubuntu de Chrome, dans le Gestionnaire des tâches ( shift + échap ), vous pouvez ajouter avec un clic droit une colonne de science-fiction qui, dans la version italienne, est "Capre Teletrasportate".

Une théorie amusante à ce sujet est here .


Google aime beaucoup les chèvres et les œufs de Pâques à base de chèvre. Il y a même eu de précédents articles sur à ce sujet .

Comme il a été mentionné dans des messages précédents, il existe également dans le gestionnaire de tâches de Chrome ( apparu pour la première fois dans la nature en 2009 ):

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

Et puis dans les versions Windows, Linux et Mac de Chrome début 2010 ). Le nombre de "Chèvres téléportées" est en fait aléatoire :

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

Les autres références de Google aux chèvres incluent:

La première corrélation entre Google et les chèvres appartient à l'article de blogue original "Tondre avec des chèvres", pour autant que je sache.

Nous pouvons sans risque supposer qu'il s'agit simplement d'un œuf de Pâques et que son utilisation n'est pas réelle, à l'exception du false .


Dès l’API 21 (le premier SDK Android 5.0 / Lollipop) , il détecte si l’application Goat Simulator est installée:

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

Cela devrait indiquer clairement que la suggestion de djechlin de l'utiliser comme un système sans avertissement if (false) est une stratégie potentiellement désastreuse. Ce qui était précédemment renvoyé par false pour chaque périphérique renvoie maintenant une valeur apparemment aléatoire: si cela était enfoui suffisamment profondément dans votre code, il pourrait prendre beaucoup de temps pour déterminer la provenance de vos nouveaux bogues.

En bout de ligne: si vous ne contrôlez pas la mise en œuvre d'une méthode et décidez de l'utiliser à des fins autres que celles indiquées dans la documentation de l'API, vous vous dirigez vers des problèmes.


En complément de la answer @djechlin (bonne réponse en passant!), Cet appel de fonction peut également être utilisé comme code factice pour conserver un point d'arrêt dans un environnement de développement intégré lorsque vous souhaitez vous arrêter dans une itération spécifique ou un appel récursif particulier, par exemple:

isUserAGoat() pourrait être utilisé à la place d'une déclaration de variable factice qui sera affichée dans l'EDI comme un avertissement et, dans le cas particulier d'Eclipse, obstruerait le point d'arrêt, ce qui rendrait plus difficile son activation / désactivation. Si la méthode est utilisée comme convention, toutes les invocations pourraient être filtrées ultérieurement par un script (au cours de la phase de validation?).

Les gars de Google sont de gros utilisateurs d’Eclipse (ils fournissent plusieurs de leurs projets sous forme de plug-ins Eclipse: SDK Android, GAE, etc.). La réponse @djechlin et cette réponse complémentaire ont donc beaucoup de sens (du moins pour moi).


Vraiment onSaveInstancedéclarer callen lorsque l'activité passe en arrière-plan

Extrait de la documentation: "la méthode onSaveInstanceState(Bundle)est appelée avant de placer l'activité dans un tel état d'arrière-plan"





java android usermanager