正确的Android UserManager.isUserAGoat()使用场景是什么?

发布时间 2023-10-19 20:34:51作者: 小满独家

内容来自 DOC[ https://q.houxu6.top/?s=正确的Android UserManager.isUserAGoat()使用场景是什么?](https://q.houxu6.top/?s=正确的Android UserManager.isUserAGoat()使用场景是什么?)

我正在查看Android 4.2中引入的新APIs。
在查看UserManager类时,我遇到了以下方法:

public boolean isUserAGoat()

用于确定进行此调用的用户是否受到传送的影响。

返回进行此调用的用户是否为山羊。

如何使用和何时应该使用它?


Android R更新:

从Android R开始,该方法总是返回false。谷歌表示这样做是为了“保护山羊隐私”。

/\*\*
 \* 用于确定进行此调用的用户是否受传送影响。
 \* @return 如果进行此调用的用户是山羊,则返回true。
 \*/
public boolean isUserAGoat() {
    if (mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.R) {
        return false;
    }
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}

之前的答案是:

在API 21之前,该方法的实现一直返回false,直到在API 21中进行了更改。

/\*\*
 \* 用于确定进行此调用的用户是否受传送影响。
 \* @return 如果进行此调用的用户是山羊,则返回true。
 \*/
public boolean isUserAGoat() {
    return false;
}

从源代码来看,对于我们这些开发者来说,这个方法似乎没有什么实际用途。有人之前表示它可能是一个彩蛋(Easter egg)

在API 21中,实现方式被更改为检查是否存在具有包名com.coffeestainstudios.goatsimulator的已安装应用程序。

/\*\*
 \* 用于确定进行此调用的用户是否受传送影响。
 \*
 \* <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");
}

这里是源代码和更改记录。