java - एंड्रॉइड UserManager.isUserAGoat () के लिए उचित उपयोग के मामले?





android (11)


मजेदार ईस्टर अंडे।
क्रोम के उबंटू संस्करण में, टास्क मैनेजर ( शिफ्ट + एएससी ) में, राइट-क्लिक के साथ आप एक विज्ञान-फाई कॉलम जोड़ सकते हैं जो इतालवी संस्करण में "कैपर टेलीलेटपोर्ट" (टेलीपोर्टेड बकरी) है।

इसके बारे में एक मजाकिया सिद्धांत here

मैं एंड्रॉइड 4.2 में पेश किए गए नए एपीआई देख रहा था। UserManager क्लास को देखते हुए मैं निम्नलिखित विधि में आया:

public boolean isUserAGoat()

यह निर्धारित करने के लिए प्रयोग किया जाता है कि यह कॉल करने वाला उपयोगकर्ता टेलीपोर्टेशन के अधीन है या नहीं।

यह लौटाता है कि उपयोगकर्ता यह कॉल कर रहा है या नहीं।

इसका उपयोग कब और कब किया जाना चाहिए?




मुझे नहीं पता कि यह "आधिकारिक उपयोग केस" था, लेकिन निम्नलिखित जावा में एक चेतावनी उत्पन्न करता है (जो return स्टेटमेंट के साथ मिश्रित होने return संकलन त्रुटियों का उत्पादन कर सकता है, जिससे पहुंचने योग्य कोड नहीं होता है):

while (1 == 2) { // Note that "if" is treated differently
    System.out.println("Unreachable code");
}

हालांकि यह कानूनी है:

while (isUserAGoat()) {
    System.out.println("Unreachable but determined at runtime, not at compile time");
}

इसलिए मैं अक्सर कोड कोड को डमी करने के सबसे तेज़ तरीके के लिए एक मूर्खतापूर्ण उपयोगिता विधि लिखता हूं, फिर डिबगिंग को पूरा करने में इसे सभी कॉल मिलते हैं, इसलिए कार्यान्वयन में बदलाव नहीं होता है, इसका उपयोग इसके लिए किया जा सकता है।

JLS बताता है कि if (false) विशिष्ट कारण के लिए "पहुंचने योग्य कोड" ट्रिगर नहीं करता है, तो यह डीबग झंडे के लिए समर्थन तोड़ देगा, यानी मूल रूप से इस उपयोग के मामले (एच / टी @auselen)। (उदाहरण के लिए static final boolean DEBUG = false; )।

if मैं अधिक अस्पष्ट उपयोग के मामले का उत्पादन कर रहा हूं, if मैं बदल गया। मेरा मानना ​​है कि आप ग्रहण की तरह अपने आईडीई की यात्रा कर सकते हैं, इस व्यवहार के साथ, लेकिन यह संपादन भविष्य में 4 साल है, और मेरे पास खेलने के लिए ग्रहण पर्यावरण नहीं है।




ग्रह के सबसे दूरस्थ पहाड़ों में, बकरी की एक उन्नत प्रजाति है जो वर्तमान में मनुष्यों की तरह फोन का उपयोग करने में सक्षम है!

लीक फुटेज: youtu.be/YJwZMUn7GdQ

Google ने इसे देखा होगा और प्रौद्योगिकी उन्नति की अगली पंक्ति में रहने के प्रयास में उनके लिए समर्थन प्रदान करने का निर्णय लिया होगा।




बकरियों और बकरी के आधार पर ईस्टर अंडे के लिए Google को गंभीर पसंद है। इसके बारे में पिछली स्टैक ओवरफ़्लो पोस्ट भी रही है

जैसा कि पिछले पदों में उल्लेख किया गया है, यह क्रोम टास्क मैनेजर के भीतर भी मौजूद है ( यह पहली बार 200 9 में जंगली में दिखाई दिया था ):

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

और फिर विंडोज़ में, 2010 की शुरुआत में क्रोम के लिनक्स और मैक संस्करण )। "बकरी टेलीपोर्ट" की संख्या वास्तव में यादृच्छिक है :

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

बकरियों के अन्य Google संदर्भों में शामिल हैं:

जहां तक ​​मैं कह सकता हूं, बकरियों और Google के सबसे शुरुआती सहसंबंध मूल "मूसिंग विद बकरी" ब्लॉग पोस्ट में हैं।

हम सुरक्षित रूप से यह मान सकते हैं कि यह केवल ईस्टर अंडे है और false वापसी के अलावा, कोई वास्तविक दुनिया का उपयोग नहीं है।




यह Google पर एक अंदरूनी मजाक प्रतीत होता है। यह Google क्रोम टास्क मैनेजर में भी दिखाया गया है। इसका कोई उद्देश्य नहीं है, कुछ इंजीनियरों के अलावा यह मनोरंजक लगता है। यदि आप करेंगे, तो यह एक उद्देश्य है।

  1. क्रोम में, Shift + Esc के साथ कार्य प्रबंधक खोलें।
  2. Goats Teleported कॉलम जोड़ने के लिए राइट क्लिक करें।
  3. आश्चर्य।

बहुत से टेलीपोर्ट बकरियों के बारे में भी एक बड़ी क्रोमियम बग रिपोर्ट है।

निम्नलिखित क्रोमियम स्रोत कोड स्निपेट HN टिप्पणियों से चोरी हो गया है।

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



कृपया नीचे स्रोत कोड देखें:

/**
 * 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 पर :

भेड़ें वे लोग हैं जिनके लिए भाषण मान्यता असाधारण रूप से अच्छी तरह से काम करती है, और बकरियां ऐसे लोग हैं जिनके लिए यह असाधारण रूप से खराब काम करता है। केवल आवाज पहचानकर्ता जानता है कि उन्हें अलग करता है। लोग भविष्यवाणी नहीं कर सकते कि किसकी आवाज आसानी से पहचानी जाएगी और जिसका नहीं होगा। सबसे अच्छी नीति इंटरफ़ेस को डिज़ाइन करना है ताकि यह सभी प्रकार के वातावरण में सभी प्रकार की आवाज़ें संभाल सके

शायद, भविष्य में बकरियों के रूप में एंड्रॉइड उपयोगकर्ताओं को बकरियों की जरूरतों के लिए भाषण मान्यता इंजन को कॉन्फ़िगर करने में सक्षम होने की योजना बनाई गई है। ;-)




एपीआई 21 (पहला एंड्रॉइड 5.0 / लॉलीपॉप एसडीके) के रूप में , यह पता लगाता है कि बकरी सिम्युलेटर ऐप इंस्टॉल है या नहीं:

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

इससे यह स्पष्ट हो जाना चाहिए कि if (false) एक संभावित विनाशकारी रणनीति है if (false) इसे चेतावनी मुक्त के रूप में उपयोग करने का डीजेक्लिन का सुझाव । जो पहले हर डिवाइस के लिए false लौटा था, वह अब एक यादृच्छिक यादृच्छिक मूल्य देता है: यदि इसे आपके कोड में काफी गहरा दफनाया गया था तो यह पता लगाने में काफी समय लग सकता है कि आपकी नई बग कहां से आ रही हैं।

निचली पंक्ति: यदि आप किसी विधि के कार्यान्वयन को नियंत्रित नहीं करते हैं और एपीआई दस्तावेज में बताए गए उद्देश्यों के अलावा इसका उपयोग करने का निर्णय लेते हैं, तो आप परेशानी के लिए जा रहे हैं।




एक समान कॉल है, isUserAMonkey() , यह बंद हो जाता है यदि MonkeyRunner टूल का उपयोग किया जा रहा है। एसडीके स्पष्टीकरण सिर्फ इस के रूप में उत्सुक है।

public static boolean isUserAMonkey(){}     

यदि उपयोगकर्ता इंटरफ़ेस वर्तमान में बंदर द्वारा गड़बड़ कर रहा है तो true वापस आता true

Here स्रोत है।

मैं उम्मीद करता हूं कि यह एक नए SDK उपकरण की प्रत्याशा में जोड़ा गया था जिसे बकरी के साथ कुछ नाम दिया गया था और वास्तव में उस उपकरण की उपस्थिति के परीक्षण के लिए कार्यात्मक होगा।

एक समान प्रश्न भी देखें, ActivityManager में अजीब फ़ंक्शन: isUseramonkey है। इसका क्या मतलब है, इसका उपयोग क्या है?




एंड्रॉइड के प्रत्येक संस्करण में एक मजेदार नाम विधि / निरंतर / जो कुछ भी है।

मैंने कभी देखा एकमात्र व्यावहारिक उपयोग Google I / O प्रतियोगिता के लिए अंतिम कॉल में था, जहां उन्होंने पूछा कि यह एक विशेष संस्करण के लिए क्या था, यह देखने के लिए कि प्रतियोगियों प्रत्येक रिलीज के लिए एपीआई diff रिपोर्ट पढ़ते हैं या नहीं। प्रतियोगिता में प्रोग्रामिंग समस्याएं भी थीं, लेकिन आम तौर पर कुछ सामान्य ज्ञान जिन्हें स्वचालित रूप से सबमिशन की संख्या को उचित मात्रा में कम करने के लिए स्वचालित रूप से वर्गीकृत किया जा सकता है, जो जांचना आसान होगा।




SL4A

SL4A जो आप चाहते हैं वह करता है। आप इसे सीधे अपने डिवाइस पर सीधे अपने डिवाइस से इंस्टॉल कर सकते हैं, और रूट की आवश्यकता नहीं है।

यह कई भाषाओं का समर्थन करता है; पायथन सबसे परिपक्व है। डिफ़ॉल्ट रूप से, यह पायथन 2.6 का उपयोग करता है, लेकिन इसके बजाय 3.2 पोर्ट है जिसका आप उपयोग कर सकते हैं। मैंने गैलेक्सी एस 2 पर सभी प्रकार की चीजों के लिए उस बंदरगाह का उपयोग किया है और यह ठीक काम करता है।

एपीआई

SL4A प्रत्येक समर्थित भाषा के लिए अपनी android लाइब्रेरी का एक बंदरगाह प्रदान करता है। लाइब्रेरी एक Android ऑब्जेक्ट के माध्यम से अंतर्निहित एंड्रॉइड एपीआई को इंटरफ़ेस प्रदान करती है।

import android
droid = android.Android()

# example using the text to speech facade
droid.ttsSpeak('hello world')

प्रत्येक भाषा में एक ही एपीआई बहुत अधिक है। आप वेबव्यू के अंदर जावास्क्रिप्ट एपीआई का भी उपयोग कर सकते हैं।

var droid = new Android();
droid.ttsSpeak('hello from js');

उपयोगकर्ता इंटरफेस

उपयोगकर्ता इंटरफेस के लिए, आपके पास तीन विकल्प हैं:

  • आप API के माध्यम से सामान्य, मूल संवाद और मेनू का आसानी से उपयोग कर सकते हैं। यह पुष्टिकरण संवाद और अन्य मूल उपयोगकर्ता इनपुट के लिए अच्छा है।
  • आप एक पायथन स्क्रिप्ट के अंदर से एक वेबव्यू भी खोल सकते हैं, फिर उपयोगकर्ता इंटरफ़ेस के लिए HTML5 का उपयोग करें। जब आप पाइथन से वेबव्यू का उपयोग करते हैं, तो आप वेबव्यू और पाइथन प्रक्रिया के बीच संदेशों को आगे और आगे भेज सकते हैं। यूआई मूल नहीं होगा, लेकिन यह अभी भी एक अच्छा विकल्प है।
  • देशी एंड्रॉइड उपयोगकर्ता इंटरफेस के लिए कुछ समर्थन है, लेकिन मुझे यकीन नहीं है कि यह कितना अच्छा काम करता है; मैंने अभी इसका इस्तेमाल नहीं किया है।

आप विकल्प मिश्रण कर सकते हैं, ताकि आप मुख्य इंटरफ़ेस के लिए एक वेबदृश्य देख सकें, और फिर भी मूल संवाद का उपयोग कर सकें।

QPython

http://qpython.com/ नाम की एक तीसरी पार्टी परियोजना है। यह एसएल 4 ए पर बनाता है, और कुछ अन्य उपयोगी चीजों में फेंकता है।

QPython आपको अपनी स्थापना का प्रबंधन करने के लिए एक अच्छा यूआई देता है, और पैकेज प्रबंधन के लिए एक छोटा, टचस्क्रीन कोड संपादक, एक पायथन खोल और एक पीआईपी खोल शामिल है। उनके पास पाइथन 3 पोर्ट भी है। दोनों संस्करण Play Store से निःशुल्क हैं। क्यूपीथन भी किवी सहित एंड्रॉइड प्रोजेक्ट्स पर पाइथन के गुच्छा से पुस्तकालयों को बंडल करता है, इसलिए यह सिर्फ एसएल 4 ए नहीं है।

ध्यान दें कि QPython अभी भी SL4A के अपने कांटा विकसित (हालांकि, ईमानदार होने के लिए ज्यादा नहीं)। मुख्य एसएल 4 ए प्रोजेक्ट स्वयं बहुत ज्यादा मृत है।







java android usermanager