java حالات الاستخدام المناسبة لـ Android UserManager.isUserAGoat()؟




(10)

مضحك عيد الفصح البيض.
في إصدار Ubuntu من Chrome ، في مدير المهام ( shift + esc ) ، بالنقر بزر الفأرة الأيمن ، يمكنك إضافة عمود sci-fi في إصدار اللغة الإيطالية هو "Capre Teletrasportate" (الماعز المسمى Teleported Goats).

نظرية مضحكة حول هذا الموضوع here .

كنت أبحث في واجهات برمجة التطبيقات الجديدة التي تم تقديمها في Android 4.2 . أثناء النظر إلى فئة UserManager صادفت الطريقة التالية:

public boolean isUserAGoat()

تُستخدم لتحديد ما إذا كان المستخدم الذي يقوم بإجراء هذه المكالمة خاضعًا لعمليات النقل الأوتوماتيكي.

إرجاع ما إذا كان المستخدم الذي يجري هذه المكالمة هو عنزة.

كيف ومتى ينبغي أن تستخدم؟


في أكثر جبال الكوكب نائية ، تكمن الأنواع المتقدمة من الماعز التي يبدو أنها قادرة على استخدام الهواتف حاليًا ، تمامًا مثل البشر!

لقطات متسربة: youtu.be/YJwZMUn7GdQ

يجب أن تكون Google قد اكتشفت ذلك وقررت تقديم الدعم لها ، في محاولة للبقاء في المقدمة للتقدم التكنولوجي.


من 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");
}

هنا هو الرابط المصدر


تحظى 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 ينتمي إلى المشاركة الأصلية في مدونة "Mowing with goats" ، بقدر ما أستطيع أن أقول.

يمكننا أن نفترض بأمان أنه مجرد بيضة عيد الفصح وليس لها استخدام في العالم الحقيقي ، باستثناء العودة false .


يوجد استدعاء مشابهة isUserAMonkey() ، التي ترجع true إذا تم استخدام أداة MonkeyRunner . التفسير SDK هو مجرد فضول مثل هذا واحد.

public static boolean isUserAMonkey(){}     

إرجاع true إذا كانت واجهة المستخدم مفسدة حاليًا بواسطة قرد.

Here هو المصدر.

أتوقع أن يتم إضافة هذا تحسبًا لأداة SDK جديدة تسمى شيئًا من الماعز وستكون فعلية لاختبار وجود هذه الأداة.

انظر أيضا سؤال مماثل ، وظيفة غريبة في ActivityManager: isUserAMonkey. ماذا يعني هذا ، ما هو استخدامه؟ .


في تخصص التعرف على الكلام ، ينقسم المستخدمون إلى ماعز وأغنام .

على سبيل المثال ، هنا في صفحة 89 :

الأغنام هم الأشخاص الذين يعمل لهم التعرف على الكلام بشكل جيد بشكل استثنائي ، والماعز هم أشخاص يعملون معه بشكل سيء بشكل استثنائي. فقط أداة التعرف على الصوت تعرف ما يفصل بينها. لا يستطيع الناس التنبؤ بصوتهم الذي سيتم التعرف عليه بسهولة ومن لا يستطيعون. أفضل سياسة هي تصميم الواجهة بحيث يمكنها التعامل مع جميع أنواع الأصوات في جميع أنواع البيئات

ربما ، من المزمع وضع علامة على مستخدمي أندرويد كماعز في المستقبل حتى يتمكنوا من تكوين محرك التعرف على الكلام لاحتياجات الماعز. ؛-)


يبدو أن هذه مزحة داخل 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;
}

استكمالا answer djechlin ( answer جيدة من جانب الطريق!) ، يمكن استخدام هذه الوظيفة أيضًا كرمز وهمي لاحتواء نقطة توقف في بيئة تطوير متكاملة (IDE) عندما تريد التوقف في بعض التكرار المحدد أو استدعاء تكراري معين ، على سبيل المثال:

يمكن استخدام isUserAGoat() بدلاً من تعريف متغير وهمية سيتم إظهاره في IDE كتحذير و ، في حالة Eclipse معينة ، سداد علامة نقطة الإيقاف ، مما يجعل من الصعب تمكين / تعطيله. إذا تم استخدام الطريقة كإتفاقية ، يمكن أن تتم تصفية جميع الدعوات في وقت لاحق من خلال بعض البرامج النصية (خلال مرحلة الالتزام ربما؟).

إن مستخدمي Google هم من مستخدمي Eclipse الثقيلة (يقدمون العديد من مشاريعهم كمكونات Eclipse الإضافية: Android SDK و GAE وغيرها) ، لذا فإن الإجابة علىdjechlin وهذه الإجابة التكميلية لها معنى كبير (على الأقل بالنسبة لي).


هناك أسلوب مضحك اسمه / ثابت / أيا كان في كل إصدار من Android.

كان الاستخدام العملي الوحيد الذي شاهدته في مسابقة Last Call for Google I / O Contest حيث سألنا عما كان عليه لإصدار معين ، لمعرفة ما إذا كان المتسابقون يقرأون تقرير فرق API لكل إصدار. كان لدى المسابقة مشكلات في البرمجة أيضًا ، ولكن بشكل عام بعض التوافقات التي يمكن تصنيفها تلقائيًا أولاً للحصول على عدد عمليات الإرسال إلى مبالغ معقولة يسهل التحقق منها.


بدءًا من 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 لكل جهاز يقوم الآن بإرجاع قيمة عشوائية ظاهريًا: إذا تم دفن ذلك بشكل عميق بما فيه الكفاية في شفرتك ، فقد يستغرق الأمر وقتًا طويلاً لمعرفة مصدر أخطاءك الجديدة.

الخلاصة: إذا كنت لا تتحكم في تنفيذ طريقة ما وتقرر استخدامها لأغراض أخرى غير المذكورة في وثائق واجهة برمجة التطبيقات ، فأنت تتجه إلى المتاعب.





usermanager