java - permission - userhandle import




Android UserManager.isUserAGoat()의 올바른 사용 사례? (8)

Google은 염소 및 염소 기반 부활절 달걀에 대해 매우 좋아합니다. 거기에 이전에 스택 오버플로에 대한 게시물이 있습니다 .

이전 게시물에서 언급했듯이 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;
 }

염소에 대한 Google의 다른 언급은 다음과 같습니다.

염소와 Google의 가장 초기 상관 관계는 내가 알 수있는 한 원래의 "염소 깎기"블로그 게시물에 속합니다.

우리는 이것이 단지 부활절 달걀이라고 가정하고 false 을 반환하는 경우를 제외하고는 실제 사용을하지 않습니다.

Android 4.2에 도입 된 새로운 API를보고있었습니다. UserManager 클래스를 살펴보면서 다음과 같은 메서드를 발견했습니다.

public boolean isUserAGoat()

이 통화를하는 사용자가 순간 이동의 대상인지 여부를 결정하는 데 사용됩니다.

이 호출을 한 사용자가 염소인지 여부를 반환합니다.

언제 어떻게 사용해야합니까?


아래 소스 코드를 참조하십시오.

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

음성 인식 분야에서 사용자는 염소 으로 구분됩니다.

예를 들어, 여기 89 페이지 :

양들은 음성 인식이 매우 잘 작동하는 사람들이며, 염소는 예외적으로 저조한 사람들입니다. 음성 인식기 만이 구분자를 구분합니다. 사람들은 누구의 목소리가 쉽게 인식되고 누구의 목소리가 아닌지 예측할 수 없습니다. 가장 좋은 정책은 모든 종류의 환경에서 모든 종류의 음성을 처리 할 수 ​​있도록 인터페이스를 설계하는 것입니다

어쩌면 안드로이드 사용자를 미래의 염소로 표시하여 염소 요구에 맞게 음성 인식 엔진을 구성 할 계획 일 것입니다. ;-)


이것은 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;
}

이런 식으로 @djechlin answer 보완하면 (자), 특정의 반복이나 특정의 재귀 호출을 정지하고 싶은 경우,이 함수 호출을 더미 코드로서 IDE에 보관 유지하는 일도 가능 합니다. 예를 들면 다음과 같습니다.

IDE에 경고로 표시되는 더미 변수 선언 대신 isUserAGoat() 사용할 수 있습니다. Eclipse에서는 특별한 경우 브레이크 포인트 표시가 막히므로이를 활성화 / 비활성화 할 수 없습니다. 이 방법을 규칙으로 사용하면 모든 호출을 나중에 일부 스크립트 (커밋 단계 중 어쩌면?)로 필터링 할 수 있습니다.

Google 사람들은 무거운 이클립스 사용자입니다 (그들은 Eclipse 플러그인으로 Android 플러그인, 즉 Android SDK, GAE 등 여러 프로젝트를 제공합니다). 따라서 @djechlin 응답과이 보완적인 대답이 많은 의미가 있습니다.


재미 있은 부활절 달걀입니다.
우분투 버전의 Chrome에서는 작업 관리자 ( shift + esc )에서 마우스 오른쪽 버튼을 클릭하면 이탈리아어 버전이 "Capre Teletrasportate"(Teleported Goats) 인 공상 과학 칼럼을 추가 할 수 있습니다.

그것에 관한 재미있는 이론이 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 를 반환 한 것은 이제 무작위로 보이는 값을 반환합니다. 코드에서 충분히 깊숙이 묻혀 있으면 새로운 버그가 어디에서 왔는지 파악하는 시간이 오래 걸릴 수 있습니다.

결론 : 메소드의 구현을 제어하지 않고 API 문서에 명시된 용도 이외의 용도로 사용하기로 결정했다면 문제가 될 수 있습니다.


행성의 가장 먼 산에서, 우리 인간과 마찬가지로 현재 휴대 전화를 사용할 수있는 고급 염소 종이 있습니다!

유출 된 영상 : youtu.be/YJwZMUn7GdQ

Google은 기술 진보의 최전선에 머물기 위해이를 발견하고 지원을 제공하기로 결정했습니다.





usermanager