java get - 適用於Android UserManager.isUserAGoat()的用例?




setkeyguarddisabled process (11)

在這個星球上最偏遠的山脈中,有一種先進的山羊種類,它們似乎能夠像我們人類一樣使用手機!

洩露的鏡頭: youtu.be/YJwZMUn7GdQ

谷歌必須已經發現了這一點,並決定為他們提供支持,試圖保持技術進步的前沿。

我正在研究Android 4.2中引入的新API。 在查看UserManager類時,我遇到了以下方法:

public boolean isUserAGoat()

用於確定進行此呼叫的用戶是否受傳送的影響。

返回進行此調用的用戶是否為山羊。

應該如何以及何時使用?


在每個版本的Android中都有一個有趣的命名方法/常量/任何東西。

我見過的唯一實際用途是在Google I / O競賽的最後召喚中,他們詢問特定版本的內容,看看參賽者是否閱讀了每個版本的API差異報告。 比賽也存在編程問題,但通常會有一些可以自動評分的瑣事,以便將提交的數量降低到合理的數量,這樣更容易檢查。



從它們的source ,用於返回false的方法直到它在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;
}

看起來這個方法作為開發人員對我們沒有實際用處。 有人此前曾表示可能是複活節彩蛋

在API 21中,實現已更改為檢查是否已安裝包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");
}

這是源鏈接


補充@djechlin answer (順便說一下好的答案!),當你想在某個特定的迭代或特定的遞歸調用中停止時,這個函數調用也可以用作偽代碼來在IDE中保存斷點,例如:

可以使用isUserAGoat()代替虛擬變量聲明,該聲明將在IDE中顯示為警告,並且在Eclipse特定情況下,將阻塞斷點標記,從而難以啟用/禁用它。 如果該方法用作約定,則稍後可以通過某些腳本過濾所有調用(在提交階段可能?)。

谷歌人是沉重的Eclipse用戶(他們提供了幾個項目作為Eclipse插件:Android SDK,GAE等),所以@djechlin答案和這個補充答案很有意義(至少對我而言)。


谷歌非常喜歡山羊和山羊的複活節彩蛋 。 甚至還有關於它的帖子

正如之前的帖子中所提到的,它也存在於Chrome任務管理器中( 它在2009年首次出現 ):

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

然後在2010年初的Windows,Linux和Mac版Chrome中 )。 “山羊傳送”的數量實際上是隨機的

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

其他谷歌參考山羊包括:

據我所知,山羊和谷歌的最早相關性屬於最初的“割山羊”博客文章。

我們可以安全地假設它只是一個複活節彩蛋,除了返回false之外沒有現實世界的使用。


在語音識別學科中,用戶分為山羊綿羊

例如,請參見第89頁

綿羊是語音識別非常好的人,山羊是非常糟糕的人。 只有語音識別器知道它們之間的區別。 人們無法預測誰的聲音將被輕易識別,誰的聲音不會被識別。 最好的策略是設計界面,以便它可以處理各種環境中的各種聲音

也許,計劃在未來將Android用戶標記為山羊,以便能夠配置語音識別引擎以滿足山羊的需求。 ;-)


請參閱以下源代碼:

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

有趣的複活節彩蛋
在Ubuntu版本的Chrome中,在任務管理器( shift + esc )中,右鍵單擊可以添加一個科幻列,其意大利語版本為“Capre Teletrasportate”(傳送山羊)。

關於它的一個有趣的理論就在here


從API 21(第一個Android 5.0 / Lollipop SDK)開始 ,它會檢測是否安裝了Goat Simulator應用程序:

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

這應該清楚地表明, djechlin建議將其用作無警告if (false)是一種潛在的災難性策略。 之前為每個設備返回false的內容現在返回一個看似隨機的值:如果在代碼中埋藏得足夠深,則可能需要長時間才能確定新bug的來源。

結論:如果您不控制方法的實現並決定將其用於API文檔中未說明的目的,那麼您將遇到麻煩。






java android usermanager