java - setcameradisabled - userhandle 0




Android UserManager.isUserAGoat()の適切な使用例 (8)

私はAndroid 4.2で導入された新しいAPIを見ていました。 UserManagerクラスを見て、私は次のメソッドを見つけました:

public boolean isUserAGoat()

このコールを行っているユーザーがテレポートしているかどうかを判断するために使用されます。

この呼び出しを行ったユーザーがヤギかどうかを返します。

いつ、どのようにこれを使うべきですか?


Androidの各バージョンには、面白い名前のメソッド/定数/何でもあります。

私が今までに見た唯一の実用的な使用方法は、 Google I / Oコンテストの最後の呼び出しで、特定のバージョンの内容を尋ねたところ、各リリースのAPI差分レポートを読んでいるかどうかを確認することでした。 コンテストにはプログラミング上の問題もありましたが、一般的に自動的に段階的に評価される可能性のあるいくつかのトリビアでは、チェックするのが簡単な妥当な金額まで提出件数を取得できます。


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を返すことを除いて、実際の使用はないと、安全に仮定することができfalse


惑星の最も遠い山々には、私たちの人間のように、現在携帯電話を使用できるように見える高度なヤギ種があります。

流出した映像: youtu.be/YJwZMUn7GdQ

技術進歩の最前線にとどまるために、Googleはこれを見つけて、サポートを提供することに決めた。


sourceから、メソッドはAPI 21で変更されるまでfalseを返すために使用されました。

/**
 * 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インストールされているアプリがあるかどうかを確認するために実装が変更され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");
}

ここにソースリンクがあります


これはGoogleの内部の冗談のようです。 Google Chromeのタスクマネージャでも紹介されています。 面白いと感じているエンジニア以外の目的はありません。 もしあなたが望むなら、どちらが目的なのか。

  1. Chromeでは、 Shift + Escでタスクマネージャを開きます
  2. 右クリックして、 Goats Teleported列を追加します。
  3. ワンダー。

あまりにも多くのテレポートされたヤギについての巨大なChromiumのバグレポートさえあります。

次のChromium ソースコードスニペットHNコメントから盗まれています。

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

以下のソースコードをご覧ください:

/**
 * 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は、デバッグフラグ、つまり基本的にこのユースケース(h / t @auselen)のサポートが中断されるという特定の理由で、「到達不能なコード」がトリガされif (false)指摘します。 ( static final boolean DEBUG = false;例えば)。

私はif whileに置き換え、より曖昧なユースケースを作り出しました。 私このような動作で、EclipseのようなあなたのIDEを飛び越えることができると信じていますが、この編集は4年後のものです。私はEclipse環境を持っていません。


面白いイースターエッグ。
Ubuntu版のChromeでは、タスクマネージャー( Shift + Esc )で右クリックすると、イタリア語版「Capre Teletrasportate」(Teleported Goats)というSFフィラメントの列を追加できます。

それに関する面白い理論がhereにありhere





usermanager