内容来自 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");
}
这里是源代码和更改记录。