Android 4.0 API

एपीआई लेवल: 14

Android 4.0 (ICE_CREAM_SANDWICH) एक मुख्य प्लैटफ़ॉर्म रिलीज़ है, जिसमें लोगों और ऐप्लिकेशन के लिए कई तरह की नई सुविधाएं जोड़ी गई हैं डेवलपर. नीचे बताई गई सभी नई सुविधाओं और एपीआई के अलावा, Android 4.0 Google News ऐप्लिकेशन प्लैटफ़ॉर्म को रिलीज़ किया गया है, क्योंकि इसमें Android 3.x से एपीआई और होलोग्राफ़िक थीम का काफ़ी बड़ा सेट शामिल किया गया है छोटी स्क्रीन पर देखने के लिए. ऐप्लिकेशन डेवलपर के तौर पर, अब आपके पास एक ही प्लैटफ़ॉर्म और यूनिफ़ाइड एपीआई फ़्रेमवर्क है की सहायता से आप अपने ऐप्लिकेशन को ऐसे एकल APK से विकसित और प्रकाशित कर सकते है जो हैंडसेट, टैबलेट वगैरह के लिए, ऑप्टिमाइज़ किया गया उपयोगकर्ता अनुभव देता है, जब Android—Android 4.0 (एपीआई लेवल 14) या उसके बाद का वर्शन.

डेवलपर के लिए, Android 4.0 प्लेटफ़ॉर्म Android SDK के लिए डाउनलोड किया जा सकने वाला कॉम्पोनेंट. डाउनलोड किए जा सकने वाले प्लैटफ़ॉर्म में ये चीज़ें शामिल हैं एक Android लाइब्रेरी और सिस्टम इमेज, साथ ही एम्युलेटर स्किन का एक सेट और वगैरह को कॉपी करने का विकल्प है. Android 4.0 को डेवलप करना या उसकी जांच करना शुरू करने के लिए, Android SDK Manager का इस्तेमाल करके, प्लैटफ़ॉर्म को अपने SDK टूल में डाउनलोड करें.

एपीआई की खास जानकारी

नीचे दिए गए सेक्शन Android 4.0 में नए एपीआई की तकनीकी खास जानकारी देते हैं.

संपर्क सूची में सोशल एपीआई

ContactsContract की सेवा देने वाली कंपनी ने संपर्क एपीआई को तय किया है डिवाइस के मालिक के लिए निजी प्रोफ़ाइल जैसी नई सामाजिक सुविधाओं का इस्तेमाल करने के लिए तैयार किया गया है और उपयोगकर्ताओं के लिए सोशल नेटवर्क पर अलग-अलग संपर्कों को आमंत्रित करने की क्षमता डिवाइस.

उपयोगकर्ता प्रोफ़ाइल

Android में अब एक ऐसी निजी प्रोफ़ाइल शामिल की गई है जो डिवाइस के मालिक की जानकारी देती है. ContactsContract.Profile टेबल. ऐसे सोशल ऐप्लिकेशन जो उपयोगकर्ता की पहचान बनाए रखते हैं ContactsContract.Profile में एक नई ContactsContract.RawContacts एंट्री बनाकर, उपयोगकर्ता के प्रोफ़ाइल डेटा में योगदान दे सकता है. इसका मतलब है कि रॉ संपर्क, जो डिवाइस इस्तेमाल करने वाले व्यक्ति की जानकारी देते हैं पारंपरिक रॉ संपर्क टेबल में नहीं होने चाहिए, जिसे ContactsContract.RawContacts यूआरआई के मुताबिक तय किया गया है; इसके बजाय, आपको टेबल CONTENT_RAW_CONTACTS_URI में है. रॉ डेटा इसके बाद, इस टेबल में मौजूद संपर्कों को "मैं" लेबल वाली एक उपयोगकर्ता को दिखने वाली प्रोफ़ाइल में इकट्ठा कर दिया जाता है.

प्रोफ़ाइल के लिए एक नया अपरिष्कृत संपर्क जोड़ने के लिए यह आवश्यक है android.Manifest.permission#WRITE_PROFILE की अनुमति. इसी तरह, प्रोफ़ाइल से पढ़ने के लिए टेबल के लिए, आपको android.Manifest.permission#READ_PROFILE की अनुमति का अनुरोध करना होगा. हालांकि, ज़्यादातर ऐप्लिकेशन को उपयोगकर्ता प्रोफ़ाइल पढ़ने की ज़रूरत नहीं होनी चाहिए, भले ही आप ऐप्लिकेशन के प्रोफ़ाइल. उपयोगकर्ता की प्रोफ़ाइल को पढ़ना एक संवेदनशील अनुमति है. आपको उम्मीद करनी चाहिए कि उपयोगकर्ता करने को लेकर दुविधा में न पड़ें.

न्योते का इंटेंट

INVITE_CONTACT इंटेंट कार्रवाई से ऐप्लिकेशन को अनुमति मिलती है का इस्तेमाल करें. ऐप्लिकेशन ऐप्लिकेशन पाने के लिए इसका इस्तेमाल, चुने गए संपर्क को न्योता भेजने के लिए किया जाता है सोशल नेटवर्क का इस्तेमाल करना. इस कार्रवाई में ज़्यादातर ऐप्लिकेशन को सुविधाएं मिल जाएंगी. उदाहरण के लिए, जब उपयोगकर्ता "कनेक्शन जोड़ें" चुनता है, तो बिल्ट-इन People ऐप्लिकेशन, न्योते के इंटेंट को शुरू करता है ख़ास जानकारी के लिए सोशल मीडिया ऐप्लिकेशन, जो किसी व्यक्ति की संपर्क जानकारी में मौजूद हो.

आपका ऐप्लिकेशन, "कनेक्शन जोड़ें" में दिखे सूची नहीं है, तो आपके ऐप्लिकेशन को आपके सोशल नेटवर्क से संपर्क जानकारी सिंक करना. इसके बाद आपको सिस्टम को यह बताना होगा कि ऐप्लिकेशन इसके मुताबिक INVITE_CONTACT इंटेंट का जवाब देता है अपने ऐप्लिकेशन की सिंक कॉन्फ़िगरेशन फ़ाइल में inviteContactActivity एट्रिब्यूट जोड़कर, उस गतिविधि का पूरी तरह क्वालिफ़ाइड नाम जिसे सिस्टम को न्योते के इंटेंट भेजते समय शुरू करना चाहिए. इसके बाद शुरू होने वाली गतिविधि, इंटेंट के संपर्क में से उस संपर्क का यूआरआई वापस ला सकती है डेटा देख सकता है और उस संपर्क को नेटवर्क में आमंत्रित करने या उस व्यक्ति को उपयोगकर्ता के कनेक्शन की जानकारी मिलती है.

बड़ी फ़ोटो

Android अब संपर्कों के लिए उच्च रिज़ॉल्यूशन वाली फ़ोटो का समर्थन करता है. अब, जब आप किसी फ़ोटो को संपर्क रिकॉर्ड है, तो सिस्टम उसे 96x96 थंबनेल (जैसा कि पहले किया जा चुका है) और 256x256 "डिसप्ले फ़ोटो" एक नए फ़ाइल-आधारित फ़ोटो स्टोर में संग्रहित किया जाता है ( इसलिए, ऐसा हो सकता है कि आने वाले समय में सिस्टम का फ़ैसला बदल जाए. संपर्क में बड़ी फ़ोटो जोड़ने के लिए, सामान्य PHOTO कॉलम में फ़ोटो डेटा पंक्ति, जिसे सिस्टम फिर सही थंबनेल और डिसप्ले फ़ोटो में प्रोसेस करेगा रिकॉर्ड करते हैं.

इस्तेमाल के बारे में सुझाव, शिकायत या राय भेजें

नए ContactsContract.DataUsageFeedback एपीआई की मदद से, यह जानकारी ट्रैक की जा सकती है कि कोई व्यक्ति कितनी बार लोगों से संपर्क करने के खास तरीकों का इस्तेमाल करता है. जैसे, कितनी बार हर फ़ोन नंबर या ईमेल पता. इस जानकारी से हर संपर्क की रैंकिंग को बेहतर बनाने में मदद मिलती है तरीका होता है और हर व्यक्ति से संपर्क करने के लिए बेहतर सुझाव देते हैं.

कैलेंडर की सेवा देने वाली कंपनी

नए कैलेंडर API से आपको कैलेंडर, इवेंट, मेहमानों को पढ़ने, जोड़ने, उनमें बदलाव करने, और उन्हें मिटाने की सुविधा मिलती है रिमाइंडर और सूचनाएँ, जिन्हें Calendar की सेवा देने वाली कंपनी में सेव किया जाता है.

कई तरह के ऐप्लिकेशन और विजेट, इन एपीआई का इस्तेमाल कैलेंडर इवेंट पढ़ने और उनमें बदलाव करने के लिए कर सकते हैं. हालांकि, इस्तेमाल के कुछ सबसे आकर्षक उदाहरणों में सिंक अडैप्टर हैं जो उपयोगकर्ता के कैलेंडर को सेवा देने वाली सभी कंपनियों के लिए एक एकीकृत स्थान उपलब्ध कराने के लिए, कैलेंडर प्रोवाइडर की अन्य कैलेंडर सेवाएं उपयोगकर्ता के इवेंट के बारे में बात करते हैं. उदाहरण के लिए, Google कैलेंडर इवेंट को Google कैलेंडर सिंक एडॉप्टर, जो इन इवेंट को Android के बिल्ट-इन कैलेंडर ऐप्लिकेशन.

कैलेंडर प्रोवाइडर में कैलेंडर और इवेंट से जुड़ी जानकारी के लिए डेटा मॉडल यह है CalendarContract ने तय किया. उपयोगकर्ता का सभी कैलेंडर डेटा CalendarContract की अलग-अलग सब-क्लास के ज़रिए तय की गई टेबल की संख्या:

  • CalendarContract.Calendars टेबल में कैलेंडर की खास जानकारी होती है जानकारी. इस टेबल की हर पंक्ति में किसी एक कैलेंडर का ब्यौरा होता है, जैसे कि नाम, जानकारी सिंक करना वगैरह.
  • CalendarContract.Events टेबल में इवेंट की खास जानकारी होती है. इस टेबल की हर लाइन में किसी एक इवेंट की जानकारी होती है, जैसे कि इवेंट का टाइटल, जगह, शुरू होने का समय, खत्म होने का समय वगैरह. यह इवेंट एक बार या बार-बार हो सकता है कई बार इस्तेमाल किया जा सकता है. मेहमानों, रिमाइंडर, और एक्सटेंडेड प्रॉपर्टी को अलग-अलग टेबल में सेव किया जाता है. इवेंट के _ID का इस्तेमाल करके, उन्हें इवेंट से लिंक करें.
  • CalendarContract.Instances टेबल में इवेंट के शुरू और खत्म होने का समय होता है किसी इवेंट के होने की संख्या. इस टेबल की हर पंक्ति एक बार होने वाली गड़बड़ी को दिखाती है. एक बार होने वाले इवेंट के लिए इवेंट के इंस्टेंस की वन-टू-वन मैपिंग होती है. बार-बार होने वाले इवेंट के लिए, एक से ज़्यादा लाइनें उस इवेंट की एक से ज़्यादा घटनाओं के मुताबिक अपने-आप जनरेट हो जाएगा.
  • CalendarContract.Attendees टेबल में, इवेंट में शामिल होने वाला व्यक्ति या मेहमान का न्योता होता है जानकारी. हर पंक्ति किसी इवेंट के एक मेहमान को दिखाती है. यह बताता है कि व्यक्ति है और व्यक्ति का जवाब.
  • CalendarContract.Reminders टेबल में सूचना/सूचना का डेटा होता है. हर पंक्ति किसी इवेंट के लिए एक सूचना दिखाती है. किसी इवेंट में एक से ज़्यादा रिमाइंडर हो सकते हैं. इतने लोगों को हर इवेंट के रिमाइंडर की जानकारी MAX_REMINDERS में दी जाती है. इसे उस सिंक अडैप्टर से सेट किया जाता है जो दिए गए कैलेंडर का स्वामी है. रिमाइंडर इवेंट से पहले मिनट के हिसाब से तय किए जाते हैं अलार्म का कोई तरीका शेड्यूल किया जा सकता है और उसे सेट किया जा सकता है. उदाहरण के लिए, रिमाइंडर, ईमेल या एसएमएस का इस्तेमाल करके रिमाइंडर सेट करना उपयोगकर्ता है.
  • CalendarContract.ExtendedProperties टेबल में, ओपेक डेटा फ़ील्ड हैं का इस्तेमाल करता है. सेवा देने वाली कंपनी, डेटा मिटाने के अलावा, इस टेबल में मौजूद आइटम पर कोई कार्रवाई नहीं करती है जब उनसे संबंधित इवेंट मिटा दिए जाएं.

Calendar की सेवा देने वाली कंपनी के साथ किसी उपयोगकर्ता के कैलेंडर डेटा को ऐक्सेस करने के लिए, आपके ऐप्लिकेशन को अनुरोध करना होगा READ_CALENDAR अनुमति (रीड ऐक्सेस के लिए) और WRITE_CALENDAR (लिखने के ऐक्सेस के लिए).

इवेंट का मकसद

अगर आपको उपयोगकर्ता के कैलेंडर में कोई इवेंट जोड़ना है, तो Events.CONTENT_URI में तय किए गए डेटा के साथ ACTION_INSERT इंटेंट का इस्तेमाल करें. ऐसा करने पर, Calendar ऐप्लिकेशन में होने वाली ऐसी गतिविधि जिससे नए इवेंट बनाए जा सकते हैं. इंटेंट का इस्तेमाल करने के लिए कोई अनुमति है और आप निम्न अतिरिक्त चीज़ों के साथ इवेंट विवरण दर्ज कर सकते हैं:

वॉइसमेल की सेवा देने वाली कंपनी

वॉइसमेल की सेवा देने वाली नई कंपनी, ऐप्लिकेशन को ताकि सभी उपयोगकर्ता के वॉइसमेल एक ही विज़ुअल प्रज़ेंटेशन में दिखाए जा सकें. उदाहरण के लिए, हो सकता है कि किसी उपयोगकर्ता के पास एक से ज़्यादा वॉइसमेल स्रोत हों, जैसे कि एक फ़ोन सेवा देने वाली कंपनी की तरफ़ से और दूसरी आवाज़ VoIP या किसी दूसरी आवाज़ से सेवाओं. ये ऐप्लिकेशन, डिवाइस पर अपने वॉइसमेल जोड़ने के लिए वॉइसमेल प्रोवाइडर के एपीआई का इस्तेमाल कर सकते हैं. कॉन्टेंट बनाने साथ ही, पहले से मौजूद फ़ोन ऐप्लिकेशन एक ही जगह पर सभी वॉइसमेल को उपयोगकर्ता के सामने पेश करता है. हालांकि, सिस्टम का फ़ोन ऐप्लिकेशन ही एक ऐसा ऐप्लिकेशन है जो सभी वॉइसमेल पढ़ सकता है, हर ऐप्लिकेशन जो वॉइसमेल उपलब्ध कराता है, उन्हें पढ़ सकता है जिन्हें उसने सिस्टम में जोड़ा है (लेकिन ऐसा नहीं हो सकता) अन्य सेवाओं के वॉइसमेल पढ़ें.

क्योंकि API वर्तमान में तृतीय-पक्ष ऐप्स को सिस्टम के लिए, वॉइसमेल एपीआई का इस्तेमाल सिर्फ़ तीसरे पक्ष के उन ऐप्लिकेशन को करना चाहिए जिनमें वॉइसमेल उपयोगकर्ता को डिलीवर करने के लिए.

VoicemailContract क्लास, वॉइसमेल प्रोव्डर. VoicemailContract.Voicemails और VoicemailContract.Status सब-क्लास में ऐसी टेबल मौजूद होती हैं जिनमें ऐप्लिकेशन ये काम कर सकते हैं डिवाइस पर स्टोरेज के लिए वॉइसमेल डेटा डालें. वॉइसमेल की सुविधा देने वाले ऐप्लिकेशन के उदाहरण के लिए, वॉइसमेल की सेवा देने वाली कंपनी डेमो.

मल्टीमीडिया

Android 4.0 उन ऐप्लिकेशन के लिए कई नए API जोड़ता है जो मीडिया के साथ सहभागिता करते है जैसे फ़ोटो, वीडियो, और संगीत.

मीडिया इफ़ेक्ट

नए मीडिया इफ़ेक्ट फ़्रेमवर्क से, इमेज पर कई तरह के विज़ुअल इफ़ेक्ट इस्तेमाल किए जा सकते हैं और वीडियो. उदाहरण के लिए, इमेज इफ़ेक्ट की मदद से रेड-आई की समस्या को आसानी से ठीक किया जा सकता है, इमेज को ग्रेस्केल में बदला जा सकता है, चमक समायोजित करें, संतृप्ति एडजस्ट करें, चित्र को घुमाएं, फ़िशआई इफ़ेक्ट लागू करें, और अन्य बहुत कुछ करें. कॉन्टेंट बनाने सबसे अच्छी परफ़ॉर्मेंस पाने के लिए, सिस्टम जीपीयू पर सभी इफ़ेक्ट की प्रोसेसिंग करता है.

अधिकतम प्रदर्शन के लिए, प्रभाव सीधे OpenGL टेक्सचर पर लागू किए जाते हैं, ताकि आपका ऐप्लिकेशन इफ़ेक्ट एपीआई का इस्तेमाल करने से पहले, इसके लिए एक मान्य OpenGL संदर्भ होना चाहिए. जिन बनावटों पर आप लागू करते हैं ये इफ़ेक्ट बिटमैप, वीडियो या कैमरे से भी आ सकते हैं. हालांकि, ऐसे कुछ प्रतिबंध हैं टेक्सचर, इन शर्तों के मुताबिक होने चाहिए:

  1. वे किसी GL_TEXTURE_2D बनावट चित्र से बंधे होने चाहिए
  2. उनमें कम से कम एक मिपमैप लेवल होना चाहिए

Effect ऑब्जेक्ट, सिंगल मीडिया इफ़ेक्ट के बारे में बताता है, जिसे लागू किया जा सकता है एक इमेज फ़्रेम होता है. Effect बनाने का बुनियादी वर्कफ़्लो यह है:

  1. अपने OpenGL ES 2.0 संदर्भ से EffectContext.createWithCurrentGlContext() को कॉल करें.
  2. EffectContext.getFactory() को कॉल करने के लिए, लौटाए गए EffectContext का इस्तेमाल करें. इससे एक इंस्टेंस दिखता है EffectFactory महीने में से.
  3. createEffect() पर कॉल करें, इसे पास करें @link android.media.effect.impactfact} से मिला इफ़ेक्ट का नाम. जैसे, EFFECT_FISHEYE या EFFECT_VIGNETTE.

किसी इफ़ेक्ट के पैरामीटर में बदलाव करने के लिए, setParameter() को कॉल करें. इसके बाद, पैरामीटर का नाम और पैरामीटर की वैल्यू पास करें. हर तरह का इफ़ेक्ट स्वीकार किया जाता है अलग-अलग पैरामीटर, जिन्हें इफ़ेक्ट के नाम के साथ दस्तावेज़ किया गया है. उदाहरण के लिए, EFFECT_FISHEYE मेंscale डिस्टॉर्शन.

टेक्सचर पर इफ़ेक्ट लागू करने के लिए, apply() को कॉल करें: Effect और इनपुट टेक्स्चर, इसकी चौड़ाई और ऊंचाई, और आउटपुट बनावट. इनपुट टेक्स्चर GL_TEXTURE_2D टेक्सचर से जुड़ा होना चाहिए इमेज (आम तौर पर, glTexImage2D() पर कॉल करने पर फ़ंक्शन). आप एक से ज़्यादा मिपमैप लेवल दे सकते हैं. अगर आउटपुट टेक्सचर टेक्सचर इमेज के रूप में, यह प्रभाव से अपने आप GL_TEXTURE_2D के रूप में और एक मिपमैप लेवल (0) से बंध जाएगा, जो समान होगा .

इस बात की गारंटी है कि EffectFactory में दिए गए सभी इफ़ेक्ट काम करेंगे. हालांकि, बाहरी लाइब्रेरी से मिलने वाले कुछ अतिरिक्त इफ़ेक्ट सभी डिवाइसों पर काम नहीं करते, इसलिए, पहले आपको यह जांच करनी होगी कि बाहरी लाइब्रेरी का मनचाहा असर isEffectSupported().

रिमोट कंट्रोल क्लाइंट

नए RemoteControlClient में मीडिया प्लेयर, वीडियो चलाने की सुविधा चालू कर सकते हैं रिमोट कंट्रोल क्लाइंट से कंट्रोल, जैसे कि डिवाइस की लॉक स्क्रीन. मीडिया प्लेयर भी स्क्रीन शेयर कर सकते हैं रिमोट कंट्रोल पर दिखाने के लिए अभी चल रहे मीडिया की जानकारी, जैसे कि ट्रैक जानकारी और एल्बम आर्ट के बारे में बात करते हैं.

अपने मीडिया प्लेयर के लिए रिमोट कंट्रोल क्लाइंट चालू करने के लिए, RemoteControlClient को उसके कंस्ट्रक्टर से इंस्टैंशिएट करें. इसके बाद, उसे ACTION_MEDIA_BUTTON को ब्रॉडकास्ट करने वाला PendingIntent दें. इंटेंट में आपके ऐप्लिकेशन में, साफ़ तौर पर उस BroadcastReceiver कॉम्पोनेंट के बारे में भी बताया जाना चाहिए जो ACTION_MEDIA_BUTTON इवेंट को मैनेज करता है.

यह एलान करने के लिए कि आपका प्लेयर कौनसे मीडिया कंट्रोल इनपुट हैंडल कर सकता है, आपको अपने डिवाइस पर setTransportControlFlags() को कॉल करना होगा RemoteControlClient, FLAG_KEY_MEDIA_* फ़्लैग का एक सेट पास कर रहा है, जैसे FLAG_KEY_MEDIA_PREVIOUS और FLAG_KEY_MEDIA_NEXT.

इसके बाद, आपको RemoteControlClient को MediaManager.registerRemoteControlClient() के पास पास करके, उसे रजिस्टर करना होगा. रजिस्टर होने के बाद, RemoteControlClient को इंस्टैंशिएट करते समय आपने जिस ब्रॉडकास्ट रिसीवर का एलान किया था उसे ACTION_MEDIA_BUTTON मिलेगा रिमोट कंट्रोल से कोई बटन दबाने पर इवेंट. आपको मिलने वाले इंटेंट में, दबाई गई मीडिया कुंजी के लिए KeyEvent शामिल होता है. इसे getParcelableExtra(Intent.EXTRA_KEY_EVENT) की मदद से इंटेंट से वापस लाया जा सकता है.

चल रहे मीडिया की जानकारी रिमोट कंट्रोल पर दिखाने के लिए, editMetaData() को कॉल करें और लौटाए गए मीडिया कॉन्टेंट में मेटाडेटा जोड़ें RemoteControlClient.MetadataEditor. आप मीडिया आर्टवर्क के लिए बिट मैप दे सकते हैं, अंकों वाली जानकारी, जैसे कि बीता हुआ समय और टेक्स्ट की जानकारी, जैसे कि ट्रैक का टाइटल. इसके लिए उपलब्ध कुंजियों की जानकारी के लिए MediaMetadataRetriever में METADATA_KEY_* फ़्लैग देखें.

सैंपल लागू करने के लिए, रैंडम म्यूज़िक प्लेयर देखें, जिसमें साथ काम करने से जुड़ा लॉजिक देता है, ताकि यह Android 4.0 पर रिमोट कंट्रोल क्लाइंट को चालू कर सके जब तक डिवाइस Android 2.1 पर वापस चल रहे हों.

मीडिया प्लेयर

  • MediaPlayer से ऑनलाइन मीडिया स्ट्रीम करने के लिए, अब INTERNET की अनुमति की ज़रूरत होगी. अगर आप MediaPlayer का इस्तेमाल इन कामों के लिए करते हैं इंटरनेट से कॉन्टेंट चलाएं, तो INTERNET जोड़ना न भूलें मेनिफ़ेस्ट की अनुमति नहीं दी है या फिर Android पर मीडिया चलाने की सुविधा काम नहीं करेगी 4.0.
  • setSurface() की मदद से, Surface को सेट किया जा सकता है, ताकि वह वीडियो सिंक की तरह काम करे.
  • setDataSource() आपको इसकी अनुमति देता है अपने अनुरोध के साथ अतिरिक्त एचटीटीपी हेडर भेजें. ये एचटीटीपी(एस) लाइव स्ट्रीमिंग के लिए काम के हो सकते हैं
  • एचटीटीपी या एचटीटीपीएस से जुड़ी लाइव स्ट्रीमिंग अब सभी अनुरोधों के लिए एचटीटीपी कुकी का इस्तेमाल करती है

मीडिया प्रकार

Android 4.0 के लिए समर्थन जोड़ता है:

  • एचटीटीपी/एचटीटीपीएस लाइव स्ट्रीमिंग प्रोटोकॉल वर्शन 3
  • ADTS रॉ AAC ऑडियो एन्कोडिंग
  • WebP इमेज
  • Matroska का वीडियो

ज़्यादा जानकारी के लिए, मदद करने वाला मीडिया पेज देखें फ़ॉर्मैट.

कैमरा

Camera क्लास में अब चेहरों का पता लगाने और उन्हें कंट्रोल करने के लिए एपीआई शामिल हैं फ़ोकस और मीटरिंग एरिया.

चेहरे की पहचान

कैमरा ऐप्लिकेशन अब Android के चेहरे की पहचान करने वाले एपीआई की मदद से, अपनी क्षमताएं बेहतर बना सकते हैं. हालांकि, ये सुविधाएं इससे सिर्फ़ किसी व्यक्ति के चेहरे का पता चलता है. साथ ही, चेहरे की कुछ खास विशेषताओं (जैसे, आंखें और मुंह) का भी पता चलता है.

अपने कैमरा ऐप्लिकेशन में चेहरों की पहचान करने के लिए, आपको setFaceDetectionListener() पर कॉल करके Camera.FaceDetectionListener रजिस्टर करना होगा. इसके बाद, शुरू किया जा सकता है और startFaceDetection() पर कॉल करके चेहरों की पहचान करना शुरू करें.

जब सिस्टम को कैमरे के सीन में एक या उससे ज़्यादा चेहरे मिलते हैं, तो यह आपके डिवाइस में onFaceDetection() कॉलबैक को कॉल करता है Camera.FaceDetectionListener को लागू करना. इसमें यह शामिल है Camera.Face ऑब्जेक्ट.

Camera.Face क्लास का एक इंस्टेंस, इन चीज़ों के बारे में अलग-अलग जानकारी देता है पहचाने गए चेहरे की पहचान हो गई है. इसमें ये शामिल हैं:

  • Rect जो कैमरे के चेहरे के हिसाब से चेहरे की सीमाओं के बारे में बताता है मौजूदा व्यू फ़ील्ड
  • 1 से 100 के बीच का पूर्णांक जो बताता है कि सिस्टम को कितना भरोसा है कि ऑब्जेक्ट इंसान का चेहरा
  • यूनीक आईडी, ताकि आप एक से ज़्यादा चेहरों को ट्रैक कर सकें
  • Point की कई चीज़ें, जो बताती हैं कि आंखें और मुंह कहां पर हैं CANNOT TRANSLATE

ध्यान दें: हो सकता है कि चेहरे की पहचान करने वाली सुविधा, कुछ डिवाइसों पर काम न करे ये डिवाइस हैं, इसलिए आपको getMaxNumDetectedFaces() पर कॉल करके जांच करनी चाहिए और पक्का करना चाहिए कि मान शून्य से ज़्यादा है. इसके अलावा, हो सकता है कि कुछ डिवाइस आंखों और मुंह की पहचान करने में काम न करें, किस स्थिति में, Camera.Face ऑब्जेक्ट में वे फ़ील्ड शून्य होंगे.

फ़ोकस और मीटरिंग क्षेत्र

कैमरा ऐप्लिकेशन अब उन जगहों को कंट्रोल कर सकते हैं जिनका इस्तेमाल कैमरा, फ़ोकस और व्हाइट मीटरिंग के लिए करता है बाक़ी बचे पैसे और ऑटो एक्सपोज़र. दोनों सुविधाएं, जानकारी देने के लिए नई Camera.Area क्लास का इस्तेमाल करती हैं कैमरा के मौजूदा व्यू का वह हिस्सा जिसका फ़ोकस या सीमित होना चाहिए. Camera.Area क्लास का एक इंस्टेंस, उस इलाके की सीमाओं को Rect और इलाके के वज़न के साथ तय करता है—जिससे उस इलाके की अहमियत का पता चलता है पूर्णांक के साथ अन्य क्षेत्रों की तुलना में—क्षेत्रफल.

फ़ोकस एरिया या मीटरिंग एरिया सेट करने से पहले, आपको पहले getMaxNumFocusAreas() या getMaxNumMeteringAreas() पर कॉल करना होगा. अगर ये शून्य रिटर्न करते हैं, तो डिवाइस पर इससे जुड़ी सुविधा काम नहीं करती.

फ़ोकस और मीटरिंग की जगह के बारे में बताने के लिए, बस setFocusAreas() या setMeteringAreas() को कॉल करें. हर एक Camera.Area ऑब्जेक्ट का List लेता है जो उन एरिया के बारे में बताता है जिन पर विचार करना चाहिए का इस्तेमाल करें. उदाहरण के लिए, कोई ऐसी सुविधा लागू की जा सकती है जिससे उपयोगकर्ता, फ़ोकस एरिया को छूकर, झलक के उस हिस्से पर फ़ोकस किया जा सकता है जिसका अनुवाद Camera.Area ऑब्जेक्ट में किया जाता है. इसके बाद, कैमरे को सीन के उस हिस्से पर फ़ोकस करने का अनुरोध किया जाता है. उस क्षेत्र का फ़ोकस या एक्सपोज़र लगातार अपडेट होता रहता है.

फ़ोटो के लिए लगातार ऑटो फ़ोकस

अब फ़ोटो क्लिक करते समय, लगातार ऑटो फ़ोकस (सीएएफ़) की सुविधा चालू की जा सकती है. सीएएफ़ को अपने कैमरा ऐप्लिकेशन, पास FOCUS_MODE_CONTINUOUS_PICTURE setFocusMode() तक. जब कैप्चर करने के लिए तैयार हों एक फ़ोटो के लिए, autoFocus() पर कॉल करें. आपके Camera.AutoFocusCallback को तुरंत कॉलबैक मिलता है, ताकि यह पता लगाया जा सके कि क्या फ़ोकस हासिल किया गया. कॉलबैक मिलने के बाद सीएएफ़ को फिर से शुरू करने के लिए, आपको cancelAutoFocus() को कॉल करना होगा.

ध्यान दें: वीडियो रिकॉर्ड करते समय, लगातार ऑटो फ़ोकस की सुविधा भी काम करती है वीडियो में FOCUS_MODE_CONTINUOUS_VIDEO का इस्तेमाल किया गया, जो एपीआई लेवल 9 में जोड़ा गया.

कैमरे की अन्य सुविधाएं

  • वीडियो रिकॉर्ड करते समय, अब takePicture() को कॉल किया जा सकता है. इससे वीडियो सेशन में कोई रुकावट नहीं आएगी. साथ ही, फ़ोटो सेव की जा सकेगी. ऐसा करने से पहले, आपको हार्डवेयर पक्का करने के लिए, isVideoSnapshotSupported() को कॉल करें का समर्थन करता है.
  • अब setAutoExposureLock() और setAutoWhiteBalanceLock() की मदद से, ऑटो एक्सपोज़र और व्हाइट बैलेंस को लॉक किया जा सकता है, ताकि इन्हें रोका जा सके इन प्रॉपर्टी में कोई बदलाव नहीं होगा.
  • अब कैमरे की झलक दिखाने की सुविधा चालू होने के दौरान, setDisplayOrientation() को कॉल किया जा सकता है. पहले, आप इसे कॉल कर सकते थे झलक शुरू करने से पहले ही, स्क्रीन की दिशा (ओरिएंटेशन) को किसी भी समय बदला जा सकता है.

कैमरे के ब्रॉडकास्ट इंटेंट

  • Camera.ACTION_NEW_PICTURE: इससे पता चलता है कि उपयोगकर्ता ने नई फ़ोटो खींची है. पहले से मौजूद Camera ऐप्लिकेशन इसे शुरू करता है फ़ोटो कैप्चर होने के बाद ब्रॉडकास्ट करना. तीसरे पक्ष के कैमरा ऐप्लिकेशन को भी इस इंटेंट को ब्रॉडकास्ट करना चाहिए कम कर सकते हैं.
  • Camera.ACTION_NEW_VIDEO: इससे पता चलता है कि उपयोगकर्ता ने नया वीडियो कैप्चर किया है. पहले से मौजूद Camera ऐप्लिकेशन इसे शुरू करता है वीडियो रिकॉर्ड होने के बाद ब्रॉडकास्ट करना. तीसरे पक्ष के कैमरा ऐप्लिकेशन को भी इस इंटेंट को ब्रॉडकास्ट करना चाहिए को कम नहीं किया जा सकता.

Android बीम (एनएफ़सी के साथ NDEF पुश)

'Android बीम' एक नई एनएफ़सी सुविधा है. इसकी मदद से, एक डिवाइस से दूसरे डिवाइस पर NDEF मैसेज भेजे जा सकते हैं किसी अन्य प्रोसेस (एक प्रोसेस को “NDEF पुश” के नाम से भी जाना जाता है). डेटा स्थानांतरण तब शुरू होता है जब दो Android पर चलने वाले ऐसे डिवाइस जो Android बीम के साथ काम करते हैं (करीब 4 से॰मी॰) के बीच होते हैं. आम तौर पर, ये डिवाइस उनकी पीठ को छूते हुए दिखाना. NDEF मैसेज के अंदर मौजूद डेटा में ऐसा कोई भी डेटा हो सकता है जिसे आपको शेयर करना है डिवाइसों के बीच स्विच करता है. उदाहरण के लिए, लोग ऐप संपर्क शेयर करता है, YouTube वीडियो शेयर करता है और ब्राउज़र Android बीम का इस्तेमाल करके यूआरएल शेयर करता है.

Android बीम का इस्तेमाल करके डिवाइस के बीच डेटा ट्रांसमिट करने के लिए, आपको एक ऐसा NdefMessage बनाना होगा जिसमें वह जानकारी हो जिसे आप अपनी गतिविधि के दौरान शेयर करना चाहते हैं का इस्तेमाल करें. इसके बाद, आपको NdefMessage को सिस्टम में दो में से किसी एक में पास करना होगा तरीके:

  • गतिविधि के दौरान पुश करने के लिए एक NdefMessage तय करें:

    सेट करने के लिए setNdefPushMessage() को किसी भी समय कॉल करें जिसे आप भेजना चाहते हैं. उदाहरण के लिए, आप इस तरीके को कॉल कर सकते हैं और अपनी गतिविधि के onCreate() के दौरान इसे NdefMessage पास कर सकते हैं तरीका. इसके बाद, जब तक गतिविधि फ़ोरग्राउंड में चलने पर, सिस्टम NdefMessage को दूसरे डिवाइस पर भेज देता है.

  • Android बीम के शुरू होने पर पुश करने के लिए NdefMessage तय करें:

    NfcAdapter.CreateNdefMessageCallback लागू करें, जिसमें createNdefMessage() को लागू करना तरीका वह NdefMessage लौटाता है जिसे आप भेजना चाहते हैं. इसके बाद, NfcAdapter.CreateNdefMessageCallback लागू करने की प्रक्रिया को setNdefPushMessageCallback() पर पास करें.

    इस स्थिति में, जब आपकी गतिविधि किसी अन्य डिवाइस के साथ फ़ोरग्राउंड में है, तो सिस्टम फिर से पाने के लिए createNdefMessage() को कॉल करता है NdefMessage. इससे आप Android बीम शुरू होने के बाद ही NdefMessage को डिलीवर कर सकते हैं, ताकि अगर कॉन्टेंट मैसेज अलग-अलग तरह से दिख सकता है.

ऐसा हो सकता है कि सिस्टम से एनडीईएफ़ डिलीवर होने के बाद, आपको कोई कोड चलाना हो तो आप NfcAdapter.OnNdefPushCompleteCallback लागू कर सकते हैं और इसे setNdefPushCompleteCallback() के साथ सेट कर सकते हैं. सिस्टम ये काम करेगा इसके बाद, मैसेज डिलीवर होने पर onNdefPushComplete() पर कॉल करें.

पाने वाले डिवाइस पर, सिस्टम NDEF पुश मैसेज को सामान्य एनएफ़सी की तरह ही भेजता है टैग. सिस्टम, ACTION_NDEF_DISCOVERED के साथ एक इंटेंट शुरू करता है कार्रवाई शुरू करें. ऐसा यूआरएल या MIME टाइप, NdefMessage में पहले NdefRecord के हिसाब से सेट किया गया है. उस गतिविधि के लिए जो आप करना चाहते हैं जवाब देते हैं, तो आप अपने ऐप्लिकेशन के लिए ज़रूरी यूआरएल या एमआईएमई टाइप के लिए इंटेंट फ़िल्टर का एलान कर सकते हैं. ज़्यादा के लिए टैग डिस्पैच के बारे में जानकारी पाने के लिए, एनएफ़सी डेवलपर गाइड देखें.

अगर आपको अपने NdefMessage में यूआरआई शामिल करना है, तो अब सुविधा का इस्तेमाल करें स्ट्रिंग या Uri ऑब्जेक्ट के आधार पर नया NdefRecord बनाने के लिए, createUri तरीका. अगर यूआरआई हो एक विशेष फ़ॉर्मेट है जिसे आप चाहते हैं कि आपका ऐप्लिकेशन किसी Android बीम इवेंट के दौरान भी मिले, को आपकी गतिविधि के लिए एक ही यूआरआई स्कीम का इस्तेमाल करके इंटेंट फ़िल्टर बनाना चाहिए, ताकि NDEF का इनकमिंग मैसेज.

आपको “Android ऐप्लिकेशन रिकॉर्ड" अपने NdefMessage के साथ यह गारंटी देने के लिए कि आपका ऐप्लिकेशन आने वाले NDEF संदेश का प्रबंधन करता है, भले ही अन्य ऐप्लिकेशन फ़िल्टर. आप इनके ज़रिए Android ऐप्लिकेशन का रिकॉर्ड बना सकते हैं: createApplicationRecord() को कॉल किया जा रहा है, पास हो रही है आपके ऐप्लिकेशन का पैकेज नाम. जब दूसरे डिवाइस को ऐप्लिकेशन रिकॉर्ड और कई ऐप्लिकेशन में ऐसी गतिविधियां शामिल होती हैं जो तय इंटेंट, सिस्टम हमेशा आपके ऐप्लिकेशन में होने वाली गतिविधि के लिए संदेश डिलीवर करता है (आपके एप्लिकेशन की मिलान प्रक्रिया के आधार पर आवेदन रिकॉर्ड.) अगर लक्ष्य डिवाइस में अभी आपका ऐप्लिकेशन इंस्टॉल नहीं है, तो सिस्टम, Google Play को लॉन्च करने और उपयोगकर्ता को तो उसे इंस्टॉल किया जा सकता है.

यदि आपका ऐप्लिकेशन NDEF पुश संदेश सेवा निष्पादित करने के लिए NFC API का उपयोग नहीं करता है, तो Android एक डिफ़ॉल्ट व्यवहार: जब आपका ऐप्लिकेशन किसी एक डिवाइस पर फ़ोरग्राउंड में होता है और Android बीम का अनुरोध किसी अन्य Android डिवाइस के साथ किया जाता है, तो दूसरे डिवाइस को Android ऐप्लिकेशन रिकॉर्ड, जिससे आपके ऐप्लिकेशन की पहचान होती है. अगर पाने वाले डिवाइस में ऐप्लिकेशन इंस्टॉल होता है, तो सिस्टम इसे लॉन्च करता है; अगर आपका ऐप्लिकेशन इंस्टॉल नहीं किया जाता है, तो Google Play इस ऐप्लिकेशन में खुलता है और उपयोगकर्ता को आपके ऐप्लिकेशन पर इंस्टॉल करने के लिए उस पर जाएं.

आप एनएफ़सी की बुनियादी बातें डेवलपर गाइड में, Android बीम और दूसरी एनएफ़सी सुविधाओं के बारे में ज़्यादा पढ़ सकते हैं. कोड के कुछ उदाहरणों के लिए Android बीम का इस्तेमाल करके, Android बीम डेमो.

वाई-फ़ाई P2P

Android, अब Android से चलने वाले डिवाइसों और डिवाइस के दूसरे टाइप (Wi-Fi Alliance के Wi-Fi DirectTM का पालन करते हुए) सर्टिफ़िकेशन प्रोग्राम में हिस्सा लेने की सुविधा मिलती है. Android फ़्रेमवर्क, वाई-फ़ाई P2P एपीआई का सेट, जो आपको हर डिवाइस को खोजने और उससे कनेक्ट करने की सुविधा देता है वाई-फ़ाई P2P का समर्थन करता है, फिर दूरी पर तेज़ गति के कनेक् शन पर ब्लूटूथ कनेक्शन.

नए पैकेज, android.net.wifi.p2p में पीयर-टू-पीयर परफ़ॉर्म करने वाले सभी एपीआई शामिल हैं वाई-फ़ाई से कनेक्ट करें. आपको WifiP2pManager के साथ काम करना होगा. इसे पाने के लिए, getSystemService(WIFI_P2P_SERVICE) पर कॉल करें. WifiP2pManager में ऐसे एपीआई शामिल हैं जो आपको ये काम करने की अनुमति देते हैं:

  • initialize() पर कॉल करके P2P कनेक्शन के लिए अपना ऐप्लिकेशन शुरू करें
  • discoverPeers() पर कॉल करके, आस-पास मौजूद डिवाइसों के बारे में जानें
  • connect() को कॉल करके P2P कनेक्शन शुरू करें
  • अन्य डेटा

कई अन्य इंटरफ़ेस और क्लास भी ज़रूरी हैं, जैसे:

  • WifiP2pManager.ActionListener इंटरफ़ेस की मदद से कॉलबैक तब होते हैं, जब पीयर को खोजने या उनसे कनेक्ट करने जैसा कोई काम पूरा होता है या नहीं हो पाता है.
  • WifiP2pManager.PeerListListener इंटरफ़ेस आपको प्राप्त करने की अनुमति देता है खोजे गए मिलते-जुलते ऐप्लिकेशन के बारे में जानकारी. कॉलबैक एक WifiP2pDeviceList देता है. इससे, रेंज में मौजूद हर डिवाइस के लिए, WifiP2pDevice ऑब्जेक्ट हासिल किया जा सकता है. साथ ही, यह जानकारी पाई जा सकती है जैसे कि डिवाइस का नाम, पता, डिवाइस का टाइप, डिवाइस पर इस्तेमाल किए जाने वाले WPS कॉन्फ़िगरेशन वगैरह.
  • WifiP2pManager.GroupInfoListener इंटरफ़ेस की मदद से, ये काम किए जा सकते हैं P2P ग्रुप के बारे में जानकारी पाएं. कॉलबैक एक WifiP2pGroup ऑब्जेक्ट देता है, जो ग्रुप की जानकारी देता है, जैसे कि मालिक, नेटवर्क नाम और लंबा पासवर्ड डालें.
  • WifiP2pManager.ConnectionInfoListener इंटरफ़ेस की मदद से, ये काम किए जा सकते हैं आपको मौजूदा कनेक्शन के बारे में जानकारी मिलेगी. कॉलबैक एक WifiP2pInfo ऑब्जेक्ट देता है, जिसमें जानकारी होती है कि क्या कोई ग्रुप गठित किया गया है और समूह का मालिक कौन है.

वाई-फ़ाई P2P एपीआई का इस्तेमाल करने के लिए, आपके ऐप्लिकेशन को उपयोगकर्ता की इन अनुमतियों का अनुरोध करना होगा:

  • ACCESS_WIFI_STATE
  • CHANGE_WIFI_STATE
  • INTERNET (हालांकि, आपका ऐप्लिकेशन तकनीकी रूप से कनेक्ट नहीं करता है से इंटरनेट से कनेक्ट करने के लिए, मानक Java सॉकेट के साथ WiFi P2P पीयर से संचार करने के लिए इंटरनेट की आवश्यकता होती है अनुमति).

Android सिस्टम, कुछ WiFi P2P इवेंट के दौरान कई अलग-अलग कार्रवाइयां भी ब्रॉडकास्ट करता है:

ज़्यादा जानकारी के लिए, WifiP2pManager दस्तावेज़ देखें. साथ ही इसे देखो वाई-फ़ाई P2P डेमो सैंपल ऐप्लिकेशन.

ब्लूटूथ हेल्थ डिवाइस

Android अब ब्लूटूथ हेल्थ प्रोफ़ाइल वाले डिवाइसों के साथ काम करता है, ताकि आप इनका इस्तेमाल करके ब्लूटूथ का इस्तेमाल करने वाले स्वास्थ्य से जुड़े डिवाइसों के साथ संपर्क करने के लिए ब्लूटूथ. जैसे, धड़कन की दर मापने वाले मॉनिटर, ब्लड मीटर, थर्मामीटर, और स्केल.

सामान्य हेडसेट और A2DP प्रोफ़ाइल डिवाइसों की तरह ही, प्रोफ़ाइल से कनेक्ट करने के लिए, आपको getProfileProxy() को BluetoothProfile.ServiceListener और HEALTH प्रोफ़ाइल टाइप के साथ कॉल करना होगा प्रॉक्सी ऑब्जेक्ट.

Health प्रोफ़ाइल प्रॉक्सी (BluetoothHealth ऑब्जेक्ट) है, तो जोड़े गए स्वास्थ्य डिवाइसों से कनेक्ट करने और उनसे संपर्क करने के लिए, ये नए तरीके अपनाए जा सकते हैं ब्लूटूथ क्लास:

  • BluetoothHealthCallback: आपको इस क्लास को बढ़ाना होगा और ऐप्लिकेशन के रजिस्ट्रेशन की स्थिति में हुए बदलावों के बारे में अपडेट पाने के लिए और ब्लूटूथ चैनल की स्थिति.
  • BluetoothHealthAppConfiguration: अपने BluetoothHealthCallback पर कॉलबैक के दौरान, आपको इस ऑब्जेक्ट का एक इंस्टेंस मिलेगा, जो उपलब्ध ब्लूटूथ हेल्थ डिवाइस के बारे में कॉन्फ़िगरेशन जानकारी देता है, जिसका उपयोग आपको BluetoothHealth API के साथ कनेक्शन शुरू और खत्म करने जैसी कई कार्रवाइयां करने के लिए.

ब्लूटूथ हेल्थ प्रोफ़ाइल का इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, BluetoothHealth के दस्तावेज़ देखें.

सुलभता

Android 4.0, 'टच-बाय-टच' मोड के ज़रिए दृष्टि बाधित उपयोगकर्ताओं के लिए, सुलभता को बेहतर बनाता है और एक्सटेंडेड एपीआई की मदद से, आपको कॉन्टेंट देखने के बारे में ज़्यादा जानकारी या बेहतर सुलभता सेवाएं डेवलप करना.

छूकर, उससे जुड़ी जानकारी सुनने वाला मोड

दृष्टि बाधित उपयोगकर्ता, अब उंगली को छूकर और खींचकर स्क्रीन के दूसरे हिस्से पर उसे खींचकर छोड़ सकते हैं स् क्रीन पर, सामग्री के बारे में बोलकर दी जाने वाली जानकारी सुन सकते हैं. क्योंकि टच-बाय-टच मोड इस तरह काम करता है जैसे वर्चुअल कर्सर के साथ-साथ, यह स्क्रीन रीडर को उसी तरह से जानकारी देने वाले टेक्स्ट की पहचान करने देता है जैसे स्क्रीन जब उपयोगकर्ता डी-पैड या ट्रैकबॉल के साथ नेविगेट करता है—तो उपयोगकर्ता दी गई जानकारी को पढ़कर, यह काम कर सकते हैं सिम्युलेट किए गए "होवर" पर android:contentDescription और setContentDescription() ने इवेंट. इसलिए, यह एक रिमाइंडर है कि आपको अपने वीडियो में ऐप्लिकेशन को इंस्टॉल करने से, खास तौर पर ImageButton, EditText, ImageView और ऐसे दूसरे विजेट जिनमें शायद जानकारी न हो टेक्स्ट.

व्यू के लिए सुलभता

स्क्रीन रीडर जैसी सुलभता सेवाओं में उपलब्ध जानकारी को बेहतर बनाने के लिए, अपने कस्टम View कॉम्पोनेंट में, सुलभता इवेंट के लिए कॉलबैक के नए तरीके लागू करें.

यह जानना ज़रूरी है कि Android में sendAccessibilityEvent() तरीका कैसे काम करता है 4.0. Android के पिछले वर्शन की तरह, जब उपयोगकर्ता डिवाइस पर सुलभता सेवाओं को चालू करता है और क्लिक या होवर जैसा कोई इनपुट इवेंट होता है, तो संबंधित व्यू को sendAccessibilityEvent(). पहले, sendAccessibilityEvent() को लागू करने पर AccessibilityEvent शुरू करें और उसे AccessibilityManager को भेजें. इस नई सुविधा में कुछ अतिरिक्त कॉलबैक शामिल हैं ऐसे तरीके जिनकी मदद से व्यू और उसके पैरंट, इवेंट में ज़्यादा काम की जानकारी जोड़ सकते हैं:

  1. शुरू होने पर, sendAccessibilityEvent() और sendAccessibilityEventUnchecked() तरीके टाल दिए जाते हैं onInitializeAccessibilityEvent() के लिए.

    View को अपनी ज़रूरत के हिसाब से लागू करने पर, हो सकता है कि onInitializeAccessibilityEvent() AccessibilityEvent में अतिरिक्त ऐक्सेसिबिलिटी जानकारी अटैच करें, लेकिन सुपर इंप्लीमेंटेशन को भी डिफ़ॉल्ट जानकारी दें, जैसे कि सामान्य कॉन्टेंट का ब्यौरा, आइटम का इंडेक्स वगैरह. हालांकि, आपको इस कॉलबैक में अतिरिक्त टेक्स्ट कॉन्टेंट नहीं जोड़ना चाहिए—ऐसा अगला.

  2. शुरू होने के बाद, अगर इवेंट उन कई टाइप में से एक है जिन्हें टेक्स्ट से पॉप्युलेट होना चाहिए देखने के बाद, व्यू को dispatchPopulateAccessibilityEvent() पर एक कॉल आता है, जो onPopulateAccessibilityEvent() में हार गई कॉलबैक.

    आम तौर पर, View को कस्टम तरीके से लागू करने पर onPopulateAccessibilityEvent() को लागू किया जाना चाहिए. ऐसा इसलिए, ताकि ज़्यादा जानकारी जोड़ने के लिए अगर android:contentDescription टेक्स्ट मौजूद नहीं है, तो AccessibilityEvent के लिए टेक्स्ट कॉन्टेंट या काफ़ी नहीं है. अधिक टेक्स्ट विवरण जोड़ने के लिए AccessibilityEvent, getText() को कॉल करें.add().

  3. ऐसा होने पर View, कॉल करके इवेंट को व्यू हैरारकी में ऊपर ले जाता है requestSendAccessibilityEvent() पैरंट व्यू. हर पैरंट व्यू में, सुलभता की जानकारी को बेहतर बनाया जा सकता है. इसके लिए, AccessibilityRecord जोड़ा जा रहा है आखिर में रूट व्यू पर पहुंच जाता है, जो sendAccessibilityEvent() के साथ इवेंट को AccessibilityManager को भेजता है.

ऊपर दिए गए नए तरीकों के अलावा, ये तरीके View क्लास को बढ़ाने में काम आते हैं. इनके अलावा, किसी भी View पर इन इवेंट कॉलबैक को रोका जा सकता है. इसके लिए, AccessibilityDelegate को बढ़ाएं और व्यू पर सेट करें setAccessibilityDelegate(). ऐसा करने पर, व्यू में मौजूद हर सुलभता का तरीका कॉल को ऐक्सेस दिया है. उदाहरण के लिए, जब व्यू को onPopulateAccessibilityEvent() पर कॉल मिलता है, तो वह उसे View.AccessibilityDelegate में यही तरीका अपनाएं. ऐसा कोई भी तरीका जिसे मैनेज नहीं किया जाता डिफ़ॉल्ट व्यवहार के लिए प्रतिनिधि को वापस व्यू में वापस ले जाया जाता है. इसकी मदद से, सिर्फ़ इस सेटिंग को बदला जा सकता है किसी भी व्यू के लिए ज़रूरी तरीकों से, View क्लास को बढ़ाए बिना.

साथ ही, अगर आपको Android 4.0 से पहले के वर्शन पर काम करते रहना है, तो तो आप v4 सहायता के नए वर्शन की मदद से ऐसा कर सकते हैं लाइब्रेरी (कंपैटबिलिटी पैकेज, r4 में) यूटिलिटी क्लास के एक सेट का इस्तेमाल करना जो पुराने सिस्टम के साथ काम करने की सुविधा के साथ नए सुलभता एपीआई उपलब्ध कराती है डिज़ाइन.

सुलभता सेवाएं

अगर कोई सुलभता सेवा डेवलप की जा रही है, तो सुलभता से जुड़े अलग-अलग इवेंट की जानकारी को काफ़ी विस्तार से बताया गया है, ताकि लोगों को ज़्यादा बेहतर सुलभता सुविधाएं मिल सकें. तय सीमा में इवेंट, व्यू कंपोज़िशन के आधार पर जनरेट होते हैं. ये इवेंट, कॉन्टेक्स्ट की बेहतर जानकारी और सुलभता सेवाओं को व्यू की हैरारकी में बदलाव करने की अनुमति देना, ताकि वे व्यू की ज़्यादा जानकारी पा सकें और खास मामलों से निपटते हैं.

अगर स्क्रीन रीडर जैसी कोई सुलभता सेवा डेवलप की जा रही है, तो नीचे दी गई प्रक्रिया का इस्तेमाल करके कॉन्टेंट की अतिरिक्त जानकारी और ट्रैवर्स व्यू की हैरारकी:

  1. किसी ऐप्लिकेशन से AccessibilityEvent मिलने पर, किसी AccessibilityRecord की जानकारी पाने के लिए, AccessibilityEvent.getRecord() पर कॉल करें. ऐसा हो सकता है कि इवेंट).
  2. AccessibilityEvent या किसी AccessibilityRecord से, AccessibilityNodeInfo ऑब्जेक्ट वापस पाने के लिए, getSource() पर कॉल किया जा सकता है.

    AccessibilityNodeInfo किसी एक नोड को दिखाता है एक ऐसे फ़ॉर्मैट में होनी चाहिए जो आपको उस फ़ाइल के बारे में सुलभता जानकारी के लिए नोड के लिए अलग-अलग हैं. AccessibilityEvent से मिला AccessibilityNodeInfo ऑब्जेक्ट, इवेंट के सोर्स की जानकारी देता है, जबकि सोर्स से मिला सोर्स AccessibilityRecord इवेंट के पहले के बारे में बताता है स्रोत.

  3. AccessibilityNodeInfo की मदद से, जानकारी पाने के लिए क्वेरी की जा सकती है इस बारे में, व्यू को ढूंढने के लिए getParent() या getChild() पर कॉल करें और यहां तक कि नोड में चाइल्ड व्यू भी जोड़ सकते हैं.

आपके ऐप्स को पहुंच-योग्यता सेवा के रूप में सिस्टम में स्वयं को प्रकाशित करने के लिए, को AccessibilityServiceInfo से जुड़ी एक्सएमएल कॉन्फ़िगरेशन फ़ाइल के बारे में बताना होगा. बनाने के बारे में ज़्यादा जानकारी पाने के लिए तो एक्सएमएल कॉन्फ़िगरेशन के बारे में जानकारी के लिए AccessibilityService और SERVICE_META_DATA देखें.

अन्य सुलभता एपीआई

अगर आपको डिवाइस की सुलभता स्थिति के बारे में जानना है, तो AccessibilityManager में कुछ नए एपीआई हैं, जैसे:

  • AccessibilityManager.AccessibilityStateChangeListener अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है एक ऐसा इंटरफ़ेस है जो सुलभता के चालू होने पर आपको कॉलबैक पाने की सुविधा देता है या बंद किया गया.
  • getEnabledAccessibilityServiceList() से यह जानकारी मिलती है कि कौनसी सुलभता सेवाएं फ़िलहाल चालू हैं.
  • isTouchExplorationEnabled() बताता है कि आप चाहें, तो 'टच-बाय-टच' मोड चालू है या नहीं.

स्पेल चेकर सर्विसेज़

नए स्पेल चेकर फ़्रेमवर्क की मदद से ऐप्लिकेशन, स्पेल चेकर को उसी तरह से बना सकते हैं जैसे इनपुट के तरीके का फ़्रेमवर्क (IME के लिए). नया स्पेल-चेकर बनाने के लिए, आपको एक ऐसी सेवा लागू करनी होगी जो बढ़ाएं SpellCheckerService और स्पेलिंग के सुझाव देने के लिए, SpellCheckerService.Session क्लास को बढ़ाएं इंटरफ़ेस के कॉलबैक तरीकों से मिले टेक्स्ट पर. SpellCheckerService.Session कॉलबैक के तरीकों में, आपको SuggestionsInfo ऑब्जेक्ट के तौर पर स्पेलिंग के सुझाव.

स्पेल चेकर सेवा वाले ऐप्लिकेशन को सेवा के लिए ज़रूरी BIND_TEXT_SERVICE अनुमति के बारे में एलान करना होगा. सेवा को इंटेंट की कार्रवाई के तौर पर, <action android:name="android.service.textservice.SpellCheckerService" /> के साथ एक इंटेंट फ़िल्टर का एलान भी करना चाहिए. ऐसा <meta-data> एलिमेंट शामिल करें जो स्पेल के लिए कॉन्फ़िगरेशन की जानकारी देता है चेकर.

नमूना देखें स्पेल चेकर सर्विस ऐप्लिकेशन और नमूना कोड के उदाहरण के लिए, स्पेल चेकर क्लाइंट ऐप्लिकेशन.

लिखाई को बोली में बदलने वाले इंजन

Android के लिखाई को बोली में बदलने (टीटीएस) एपीआई को काफ़ी हद तक बढ़ाया गया है, ताकि ऐप्लिकेशन कस्टम TTS इंजन का उपयोग ज़्यादा आसानी से किया जा सकता है, जबकि जो एप्लिकेशन किसी TTS इंजन का उपयोग करना चाहते हैं, उनके पास इंजन चुनने के लिए कुछ नए एपीआई.

लिखाई को बोली में बदलने वाले इंजन का इस्तेमाल करना

Android के पिछले वर्शन में, TextToSpeech क्लास का इस्तेमाल किया जा सकता था सिस्टम के टीटीएस इंजन का इस्तेमाल करके, लिखाई को बोली में बदलने की सुविधा (टीटीएस) कार्रवाइयां करें या setEngineByPackageName() का इस्तेमाल करने वाला कस्टम इंजन. Android 4.0 में, setEngineByPackageName() तरीका बंद कर दिया गया है और अब आप ऐसे नए TextToSpeech कंस्ट्रक्टर के साथ इस्तेमाल करने के लिए इंजन तय कर सकते हैं जो टीटीएस इंजन के पैकेज नाम को स्वीकार करता हो.

getEngines() की मदद से, उपलब्ध टीटीएस इंजन के बारे में क्वेरी भी की जा सकती है. यह तरीका, TextToSpeech.EngineInfo ऑब्जेक्ट की सूची दिखाता है, जिसमें इंजन का मेटा डेटा शामिल होता है आइकॉन, लेबल, और पैकेज का नाम.

लिखाई को बोली में बदलने वाले इंजन बनाना

पहले, कस्टम इंजन के लिए यह ज़रूरी था कि इंजन को ऐसे नेटिव हेडर का इस्तेमाल करके बनाया जाए जो दस्तावेज़ में नहीं है फ़ाइल से लिए जाते हैं. Android 4.0 में, टीटीएस इंजन बनाने के लिए फ़्रेमवर्क एपीआई का पूरा सेट होता है.

बुनियादी सेटअप के लिए TextToSpeechService को लागू करने की ज़रूरत होती है, जो INTENT_ACTION_TTS_SERVICE इंटेंट का जवाब देता है. कॉन्टेंट बनाने टीटीएस इंजन का मुख्य काम, किसी सेवा में onSynthesizeText() कॉलबैक के दौरान होता है जो TextToSpeechService तक बढ़ाई जा सकती है. सिस्टम इस तरीके को दो बार डिलीवर करता है ऑब्जेक्ट:

  • SynthesisRequest: इसमें कई तरह का डेटा होता है, जिनमें यह टेक्स्ट भी शामिल होता है: सिंथेसाइज़, स्थान-भाषा, बोलने की स्पीड, और वॉइस पिच.
  • SynthesisCallback: यह वह इंटरफ़ेस है जिससे आपका TTS इंजन इसकी वजह से, स्पीच डेटा को ऑडियो स्ट्रीमिंग के तौर पर डिलीवर किया जाता है. सबसे पहले, इंजन को start() को कॉल करना होगा, ताकि यह बताया जा सके कि इंजन डिलीवर करने के लिए तैयार है ऑडियो को सुनें, फिर audioAvailable() पर कॉल करें, उसे ऑडियो डेटा को बाइट बफ़र में पास करना. जब आपका इंजन सभी ऑडियो को बफ़र, done() कॉल करें.

अब टीटीएस इंजन बनाने के लिए, फ़्रेमवर्क सही एपीआई के साथ काम करता है, इसलिए यह नेटिव कोड के साथ काम करता है हटा दिया गया है. कम्पैटबिलटी लेयर के बारे में जानकारी देने वाली ब्लॉग पोस्ट देखें जिनका इस्तेमाल करके अपने पुराने TTS इंजन को नए फ़्रेमवर्क में बदला जा सकता है.

नए एपीआई का इस्तेमाल करने वाले टीटीएस इंजन के उदाहरण के लिए, टेक्स्ट से बोली इंजन का सैंपल ऐप्लिकेशन देखें.

नेटवर्क का इस्तेमाल

Android 4.0 उपयोगकर्ताओं को सटीक जानकारी देता है कि उनके ऐप्लिकेशन कितने नेटवर्क डेटा का इस्तेमाल कर रहे हैं. सेटिंग ऐप्लिकेशन ऐसे कंट्रोल देता है जिनकी मदद से उपयोगकर्ता, नेटवर्क डेटा के इस्तेमाल और इसके लिए सीमा तय करने की सेटिंग को मैनेज कर सकते हैं यहां तक कि अलग-अलग ऐप्लिकेशन के लिए बैकग्राउंड डेटा के इस्तेमाल को भी बंद किया जा सकता है. उपयोगकर्ताओं द्वारा आपकी साइट को अक्षम होने से बचाने के लिए बैकग्राउंड में मौजूद डेटा को ऐक्सेस करने की अनुमति के लिए, आपको डेटा इस्तेमाल करने की रणनीतियां बनानी चाहिए और आपके डिवाइस के इस्तेमाल में बदलाव ला सकता है.

अगर आपका ऐप्लिकेशन, नेटवर्क से जुड़े कई लेन-देन करता है, तो आपको ऐसी उपयोगकर्ता सेटिंग देनी चाहिए जो इससे लोगों को यह कंट्रोल करने की अनुमति मिलती है कि आपका ऐप्लिकेशन, डेटा से जुड़े डेटा को कैसे मैनेज कर सकता है. जैसे, आपका ऐप्लिकेशन, डेटा को कितनी बार सिंक करता है, अपलोड/डाउनलोड केवल वाई-फ़ाई पर होने पर ही करें, चाहे रोमिंग में डेटा उपयोग करना हो, आदि. इन कंट्रोल नहीं करती हैं, तो इस बात की संभावना बहुत कम हो जाती है कि उपयोगकर्ता आपके ऐप्लिकेशन के लिए डेटा का ऐक्सेस बंद कर देंगे, जब वे अपनी सीमाओं तक पहुंच जाते हैं, क्योंकि इसके बजाय वे आपके ऐप्लिकेशन के उपयोग किए जाने वाले डेटा को सटीक रूप से नियंत्रित कर सकते हैं. अगर इन सेटिंग के साथ कोई प्राथमिकता वाली गतिविधि उपलब्ध कराई जाती है, तो आपको उसके मेनिफ़ेस्ट में शामिल होना चाहिए ACTION_MANAGE_NETWORK_USAGE के लिए इंटेंट फ़िल्टर की जानकारी कार्रवाई. उदाहरण के लिए:

<activity android:name="DataPreferences" android:label="@string/title_preferences">
    <intent-filter>
       <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
       <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

यह इंटेंट फ़िल्टर सिस्टम को बताता है कि यह वह गतिविधि है जो आपकी ऐप्लिकेशन के डेटा खर्च को रिकॉर्ड करता है. इस तरह, जब उपयोगकर्ता इस बात की जांच करता है कि आपका ऐप्लिकेशन Settings ऐप्लिकेशन, “ऐप्लिकेशन की सेटिंग देखें" बटन उपलब्ध है जो आपके गतिविधि को प्राथमिकता देते हैं, ताकि उपयोगकर्ता यह तय कर सकें कि आपके ऐप्लिकेशन के कितने डेटा का इस्तेमाल किया जाए.

साथ ही ध्यान रखें कि getBackgroundDataSetting() अब बंद करता है और हमेशा सही दिखाता है—इसके बजाय getActiveNetworkInfo() का इस्तेमाल करें. किसी भी नेटवर्क का इस्तेमाल करने से पहले लेन-देन के लिए, आपको हमेशा getActiveNetworkInfo() को कॉल करना चाहिए इससे मौजूदा नेटवर्क की जानकारी देने वाला NetworkInfo पता लगाया जा सकता है. साथ ही, isConnected() से क्वेरी करके यह पता लगाया जा सकता है कि डिवाइस में कनेक्शन. इसके बाद, कनेक्शन की अन्य प्रॉपर्टी देखी जा सकती हैं. जैसे: रोमिंग में हो या वाई-फ़ाई से कनेक्ट किया गया हो.

Enterprise

Android 4.0, एंटरप्राइज़ ऐप्लिकेशन के लिए इन सुविधाओं को बेहतर बनाता है.

वीपीएन सेवाएं

नया VpnService, ऐप्लिकेशन को अपना वीपीएन (वर्चुअल तौर पर) बनाने की अनुमति देता है निजी नेटवर्क), जो Service के तौर पर चल रहा है. वीपीएन सेवा, अपने पते और रूटिंग के नियमों वाला वर्चुअल नेटवर्क, फ़ाइल डिस्क्रिप्टर शामिल है.

वीपीएन सेवा बनाने के लिए, VpnService.Builder का इस्तेमाल करें. इससे आपको यह तय करने में मदद मिलती है कि नेटवर्क पता, DNS सर्वर, नेटवर्क रूट वगैरह. पूरा होने के बाद, आपके पास establish() को कॉल करके इंटरफ़ेस खोजें, जो ParcelFileDescriptor दिखाता है.

वीपीएन सेवा, पैकेट को इंटरसेप्ट कर सकती है. इसलिए, सुरक्षा पर असर पड़ सकता है. इसलिए, अगर आपको VpnService लागू है, तो आपकी सेवा को BIND_VPN_SERVICE की ज़रूरत होगी, ताकि यह पक्का किया जा सके कि सिर्फ़ सिस्टम इसके साथ बाइंड कर सके (सिर्फ़) सिस्टम को यह अनुमति दी गई है—ऐप्लिकेशन इसका अनुरोध नहीं कर सकते). फिर अपनी वीपीएन सेवा का इस्तेमाल करने के लिए, इस्तेमाल करने वालों को इसे सिस्टम सेटिंग में मैन्युअल रूप से चालू करना होगा.

डिवाइस से जुड़ी नीतियां

डिवाइस से जुड़ी पाबंदियों को मैनेज करने वाले ऐप्लिकेशन, अब setCameraDisabled() और USES_POLICY_DISABLE_CAMERA प्रॉपर्टी (नीति कॉन्फ़िगरेशन फ़ाइल में <disable-camera /> एलिमेंट पर लागू होता है) का इस्तेमाल करके, कैमरा बंद कर सकते हैं.

सर्टिफ़िकेट मैनेजमेंट

नई KeyChain क्लास में ऐसे एपीआई मिलते हैं जो आपको इंपोर्ट और ऐक्सेस करने की अनुमति देते हैं सर्टिफ़िकेट भी मिलेगा. सर्टिफ़िकेट, दोनों क्लाइंट को इंस्टॉल करने की प्रोसेस को आसान बनाते हैं सर्टिफ़िकेट (उपयोगकर्ता की पहचान की पुष्टि करने के लिए) और सर्टिफ़िकेट देने वाली संस्था का सर्टिफ़िकेट सर्वर की पहचान की पुष्टि करें). वेब ब्राउज़र या ईमेल क्लाइंट जैसे ऐप्लिकेशन इंस्टॉल किए गए सर्वर पर उपयोगकर्ताओं की पुष्टि करने के लिए सर्टिफ़िकेट. KeyChain देखें दस्तावेज़ देखें.

डिवाइस के सेंसर

Android 4.0 में दो नए तरह के सेंसर जोड़े गए हैं:

  • TYPE_AMBIENT_TEMPERATURE: तापमान मापने वाला ऐसा सेंसर जो नतीजे देता है डिग्री सेल्सियस में वातावरण (कमरे) का तापमान.
  • TYPE_RELATIVE_HUMIDITY: नमी मापने वाला ऐसा सेंसर जो प्रतिशत के तौर पर, कमरे में मौजूद नमी की मात्रा को मापा जाता है.

अगर किसी डिवाइस में TYPE_AMBIENT_TEMPERATURE और TYPE_RELATIVE_HUMIDITY, दोनों सेंसर हैं, तो ड्यू पॉइंट का हिसाब लगाने के लिए इनका इस्तेमाल किया जा सकता है और पूरी नमी.

तापमान मापने वाला पिछला सेंसर TYPE_TEMPERATURE, बंद कर दिया गया है. आपको TYPE_AMBIENT_TEMPERATURE सेंसर का इस्तेमाल करना चाहिए आज़माएं.

इसके अलावा, Android के तीन सिंथेटिक सेंसर को काफ़ी बेहतर बनाया गया है. इसलिए, अब ये सेंसर कम हो गए हैं बिना किसी रुकावट के काम करता है. इन सेंसर में गुरुत्वाकर्षण सेंसर (TYPE_GRAVITY), रोटेशन वेक्टर सेंसर (TYPE_ROTATION_VECTOR), और लीनियर ऐक्सेलरेशन सेंसर (TYPE_LINEAR_ACCELERATION) शामिल हैं. बेहतर सेंसर जाइरोस्कोप पर निर्भर करते हैं सेंसर का इस्तेमाल कर सकते हैं. इसलिए, सेंसर सिर्फ़ जाइरोस्कोप वाले डिवाइस पर दिखते हैं.

कार्रवाई बार

कई नई सुविधाओं के साथ काम करने के लिए, ActionBar को अपडेट किया गया है. ज़्यादातर अहम बात यह है कि सिस्टम, ऐक्शन बार के साइज़ और कॉन्फ़िगरेशन को ग्रेसफ़ुल तरीके से मैनेज करता है. छोटी स्क्रीन, ताकि सभी स्क्रीन आकारों पर सर्वोत्तम उपयोगकर्ता अनुभव उपलब्ध कराया जा सके. उदाहरण के लिए, जब स्क्रीन छोटी हो (जैसे कि जब हैंडसेट पोर्ट्रेट ओरिएंटेशन में हो), तो कार्रवाई बार की नेविगेशन टैब, “स्टैक्ड बार" में दिखते हैं. यह मैसेज, ऐक्शन बार के ठीक नीचे दिखता है. आप साथ ही, “स्प्लिट ऐक्शन बार" में ऑप्ट-इन कर सकते हैं. इसमें सभी ऐक्शन आइटम को सबसे नीचे एक अलग बार में रखा जाता है छोटा सा होने पर स्क्रीन दिखाई देती है.

स्प्लिट ऐक्शन बार

अगर आपके कार्रवाई बार में कई कार्रवाई आइटम हैं, तो उनमें से सभी कार्रवाई बार में ठीक नहीं होंगे एक छोटी स्क्रीन, ताकि सिस्टम उनमें से ज़्यादा जानकारी को ओवरफ़्लो मेन्यू में रख दे. हालांकि, Android 4.0 इसकी मदद से, “स्प्लिट ऐक्शन बार" को चालू किया जा सकता है ताकि स्क्रीन पर ज़्यादा ऐक्शन आइटम दिख सकें पर क्लिक करें. विभाजित कार्रवाई बार को चालू करने के लिए, "splitActionBarWhenNarrow" के साथ android:uiOptions को अपने <application> टैग या अलग-अलग <activity> टैग को अपलोड करने की ज़रूरत नहीं है. इसे चालू करने पर, सिस्टम इसके नीचे एक अतिरिक्त बार जोड़ देगा स्क्रीन छोटी होने पर सभी ऐक्शन आइटम के लिए स्क्रीन (मुख्य ऐक्शन आइटम ऐक्शन बार).

अगर आपको ActionBar.Tab API से मिले नेविगेशन टैब का इस्तेमाल करना है, तो लेकिन ऊपर मौजूद मुख्य कार्रवाई बार की ज़रूरत नहीं है (आपको सिर्फ़ सबसे ऊपर टैब दिखने चाहिए), फिर चालू करें स्प्लिट ऐक्शन बार का इस्तेमाल करें औरsetDisplayShowHomeEnabled(false) ऐप्लिकेशन आइकॉन पर क्लिक करें. मुख्य कार्रवाई बार में कुछ भी नहीं बचा है, गायब हो जाता है—अब सब कुछ बाईं ओर, सबसे ऊपर मौजूद नेविगेशन टैब और पर क्लिक करें.

ऐक्शन बार के स्टाइल

अगर आपको ऐक्शन बार पर कस्टम स्टाइलिंग लागू करनी है, तो बैकग्राउंड लागू करने के लिए, नई स्टाइल प्रॉपर्टी backgroundStacked और backgroundSplit का इस्तेमाल करें ड्रॉ करने लायक या कलर करने के लिए, स्टैक किए गए बार और स्प्लिट बार का इस्तेमाल किया जाता है. आप इन शैलियों को यहां भी सेट कर सकते हैं: setStackedBackgroundDrawable() और setSplitBackgroundDrawable() के साथ रनटाइम.

कार्रवाई करने वाली कंपनी

नई ActionProvider क्लास आपको इनके लिए एक खास हैंडलर बनाने की सुविधा देती है ऐक्शन आइटम. कार्रवाई की सुविधा देने वाली कंपनी, कार्रवाई व्यू, डिफ़ॉल्ट कार्रवाई व्यवहार, और सबमेन्यू तय कर सकती है जोड़ी जा सकती है. जब आप कोई ऐसा कार्रवाई आइटम बनाना चाहते हों जिसमें डाइनैमिक बिहेवियर (जैसे कि वैरिएबल ऐक्शन व्यू, डिफ़ॉल्ट ऐक्शन या सबमेन्यू) के साथ काम करता है, तो ActionProvider को बढ़ाना एक अच्छा तरीका है. इससे, फिर से इस्तेमाल किया जा सकने वाला कॉम्पोनेंट बनाया जा सकता है. आपके फ़्रैगमेंट या गतिविधि में कई तरह के ऐक्शन आइटम ट्रांसफ़ॉर्मेशन को मैनेज कर रहा है.

उदाहरण के लिए, ShareActionProvider, ActionProvider का एक्सटेंशन है, जो "शेयर" की सुविधा देता है कार्रवाई चुनें. का उपयोग करने के बजाय ट्रेडिशनल ऐक्शन आइटम, जो ACTION_SEND इंटेंट को शुरू करता है. हालांकि, इसकी मदद से इस कार्रवाई की सेवा देने वाली कंपनी का इस्तेमाल, उन ऐप्लिकेशन की ड्रॉप-डाउन सूची के साथ कार्रवाई व्यू पेश करने के लिए करें जो हैंडल कर सकते हैं ACTION_SEND इंटेंट. जब उपयोगकर्ता इस्तेमाल करने के लिए कोई ऐप्लिकेशन चुनता है कार्रवाई के लिए, ShareActionProvider उस चुने गए विकल्प को याद रखता है और उसे उपलब्ध कराता है कार्रवाई व्यू में जा सकते हैं.

किसी ऐक्शन आइटम के लिए, कार्रवाई करने वाली कंपनी के बारे में जानकारी देने के लिए, android:actionProviderClass शामिल करें विशेषता, जो कार्रवाई के क्लास नाम के साथ आपकी गतिविधि के विकल्प मेन्यू के <item> एलिमेंट में मौजूद है प्रोवाइडर का इस्तेमाल करें. उदाहरण के लिए:

<item android:id="@+id/menu_share"
      android:title="Share"
      android:showAsAction="ifRoom"
      android:actionProviderClass="android.widget.ShareActionProvider" />

आपकी गतिविधि के onCreateOptionsMenu() में कॉलबैक तरीका है, मेन्यू आइटम से ऐक्शन प्रोवाइडर का इंस्टेंस फिर से पाएं और इंटेंट:

Kotlin

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.options, menu)
    val shareActionProvider = menu.findItem(R.id.menu_share)?.actionProvider as? ShareActionProvider
    // Set the share intent of the share action provider.
    shareActionProvider?.setShareIntent(createShareIntent())
    ...
    return super.onCreateOptionsMenu(menu)
}

Java

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options, menu);
    ShareActionProvider shareActionProvider =
          (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();
    // Set the share intent of the share action provider.
    shareActionProvider.setShareIntent(createShareIntent());
    ...
    return super.onCreateOptionsMenu(menu);
}

ShareActionProvider का इस्तेमाल करने वाले उदाहरण के लिए, ApiDemos में ActionBarShareActionProviderActivity देखें.

छोटे किए जा सकने वाले ऐक्शन व्यू

ऐक्शन आइटम, जो ऐक्शन व्यू देते हैं वे अब अपने ऐक्शन व्यू की स्थिति और कार्रवाई आइटम की पारंपरिक स्थिति. पहले, सिर्फ़ SearchView का इस्तेमाल किया जा सकता था कार्रवाई व्यू के तौर पर इस्तेमाल किए जाने पर छोटा हो जाता है. हालांकि, अब आप किसी भी ऐक्शन आइटम के लिए ऐक्शन व्यू जोड़ सकते हैं और विस्तृत स्थिति (कार्रवाई दृश्य दिखाई दे रहा है) और संक्षिप्त स्थिति के बीच स्विच करें (कार्रवाई आइटम है दिखाई देता है).

यह एलान करने के लिए कि जिस ऐक्शन आइटम में ऐक्शन व्यू शामिल है उसे छोटा किया जा सकता है. इसके लिए, मेन्यू की एक्सएमएल फ़ाइल में, <item> एलिमेंट के लिए, android:showAsAction एट्रिब्यूट में “collapseActionView" फ़्लैग शामिल करें.

ऐक्शन व्यू को बड़ा और छोटा करने के बीच स्विच करने पर, कॉलबैक पाने के लिए setOnActionExpandListener() पर कॉल करके संबंधित MenuItem के साथ MenuItem.OnActionExpandListener का इंस्टेंस. आम तौर पर, onCreateOptionsMenu() कॉलबैक के दौरान ऐसा करना चाहिए.

छोटे किए जा सकने वाले ऐक्शन व्यू को कंट्रोल करने के लिए, collapseActionView() और expandActionView() को इस पर कॉल किया जा सकता है संबंधित MenuItem.

कस्टम ऐक्शन व्यू बनाते समय, व्यू को बड़ा करने पर कॉलबैक पाने के लिए, नया CollapsibleActionView इंटरफ़ेस भी लागू किया जा सकता है और छोटा किया गया.

ऐक्शन बार के लिए अन्य एपीआई

  • setHomeButtonEnabled() से आपको यह तय करने की सुविधा मिलती है कि आइकॉन/लोगो, होम पेज पर जाने या “ऊपर” जाने के लिए बटन की तरह काम करता है (“सही” को पास करें, ताकि इसे इस तरह व्यवहार किया जा सके (एक बटन).
  • setIcon() और setLogo() की मदद से, रनटाइम के दौरान ऐक्शन बार का आइकॉन या लोगो तय किया जा सकता है.
  • Fragment.setMenuVisibility() आपको इसे चालू करने की अनुमति देता है या फ़्रैगमेंट से बताए गए विकल्प मेन्यू आइटम के दिखने की सुविधा बंद करें. यह तब फ़ायदेमंद होता है, जब ऐक्टिविटी में फ़्रैगमेंट जोड़ा गया है, लेकिन वह दिख नहीं रहा है, इसलिए मेन्यू आइटम छिपा हुआ है.
  • FragmentManager.invalidateOptionsMenu() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है फ़्रैगमेंट लाइफ़साइकल की अलग-अलग स्थितियों के दौरान गतिविधि के विकल्प मेन्यू को अमान्य करने की अनुमति देता है हो सकता है कि Activity की समान विधि का इस्तेमाल करने की सुविधा उपलब्ध न हो.

यूज़र इंटरफ़ेस और व्यू

Android 4.0 कई तरह के नए व्यू और दूसरे यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट पेश करता है.

ग्रिडलेआउट

GridLayout एक नया व्यू ग्रुप है, जो चाइल्ड व्यू को आयताकार में रखता है ग्रिड. TableLayout के उलट, GridLayout फ़्लैट पर निर्भर करता है साथ ही, इसमें स्ट्रक्चर उपलब्ध कराने के लिए टेबल की पंक्तियों जैसे इंटरमीडिएट व्यू का इस्तेमाल नहीं किया जाता है. इसके बजाय, चाइल्ड तय करते हैं कि उन्हें कौनसी लाइन और कॉलम शामिल होने चाहिए (सेल एक से ज़्यादा हो सकती हैं) पंक्तियां और/या कॉलम), डिफ़ॉल्ट रूप से ग्रिड की पंक्तियों और कॉलम में एक क्रम में रखी जाती हैं. GridLayout ओरिएंटेशन से यह तय होता है कि क्रम में चलने वाले चिल्ड्रन यह हॉरिज़ॉन्टल या वर्टिकल तौर पर रखी जाती है. बच्चों के बीच की जगह को इनमें से किसी एक का इस्तेमाल करके तय किया जा सकता है नए Space व्यू के इंस्टेंस या काम के मार्जिन पैरामीटर सेट करके बच्चों पर कितना असर पड़ेगा.

ApiDemos देखें सैंपल देखने के लिए, GridLayout का इस्तेमाल करें.

टेक्स्चर व्यू

TextureView एक नया व्यू है, जिससे आप कॉन्टेंट स्ट्रीम दिखा सकते हैं, जैसे को वीडियो या OpenGL सीन के तौर पर इस्तेमाल किया जा सकता है. हालांकि SurfaceView से मिलती-जुलती है, लेकिन TextureView इस मामले में यूनीक है, क्योंकि यह एक नियमित व्यू की तरह काम करता है, न कि अलग विंडो, ताकि आप इसे किसी अन्य View ऑब्जेक्ट की तरह इस्तेमाल कर सकें. उदाहरण के लिए, आप ट्रांसफ़ॉर्म को लागू कर सकते हैं, ViewPropertyAnimator का इस्तेमाल करके उसे ऐनिमेट कर सकते हैं या setAlpha() के साथ इसकी ओपैसिटी को कम या ज़्यादा करें.

ध्यान रखें कि TextureView सिर्फ़ हार्डवेयर ऐक्सेलरेटेड विंडो में काम करता है.

ज़्यादा जानकारी के लिए, TextureView दस्तावेज़ देखें.

विजेट बदलें

नया Switch विजेट दो स्टेटस वाला टॉगल है. इसे उपयोगकर्ता खींचकर एक स्थिति में ला सकते हैं दो स्थितियों के बीच एक विकल्प को टॉगल करने के लिए किनारे या दूसरे (या बस टैप करें).

टेक्स्ट की जानकारी देने के लिए, android:textOn और android:textOff एट्रिब्यूट का इस्तेमाल किया जा सकता है चालू और बंद सेटिंग में होने पर स्विच पर दिखाई देने के लिए. android:text एट्रिब्यूट भी आपको स्विच के साथ एक लेबल लगाने की अनुमति देता है.

स्विच का इस्तेमाल करने वाले सैंपल के लिए, switches.xml लेआउट फ़ाइल देखें और संबंधित स्विच गतिविधि.

Android 3.0 में पॉप-अप होने वाले छोटे प्रासंगिक मेन्यू बनाने के लिए, PopupMenu लॉन्च किया गया आपके चुने हुए ऐंकर पॉइंट पर ऊपर की ओर ले जाएं. आम तौर पर, चुने गए आइटम के पॉइंट पर. Android 4.0 विस्तार PopupMenu में कुछ काम की सुविधाएं भी शामिल हैं:

  • अब inflate() के साथ एक्सएमएल मेन्यू रिसॉर्स से, पॉप-अप मेन्यू के कॉन्टेंट को आसानी से बढ़ाया जा सकता है. इससे, इसे मेन्यू रिसॉर्स आईडी को पास किया जा सकता है.
  • अब आप ऐसा PopupMenu.OnDismissListener भी बना सकते हैं, जो मेन्यू खारिज होने पर कॉलबैक करें.

प्राथमिकताएं

एक नई TwoStatePreference ऐब्सट्रैक्ट क्लास, ऐसी प्राथमिकताएं जो दो-राज्य चुनने का विकल्प देती हैं. नया SwitchPreference, TwoStatePreference का ही एक एक्सटेंशन है, जोSwitch प्राथमिकता दिखाने वाला व्यू, जिससे उपयोगकर्ता किसी सेटिंग को चालू या बंद कर सकते हैं. इसके लिए, उन्हें अलग से कोई सेटिंग खोलने की ज़रूरत नहीं होती प्राथमिकता स्क्रीन या डायलॉग बॉक्स पर क्लिक करें. उदाहरण के लिए, सेटिंग ऐप्लिकेशन वाई-फ़ाई और ब्लूटूथ सेटिंग के लिए SwitchPreference का इस्तेमाल करता है.

सिस्टम की थीम

Android 4.0 को टारगेट करने वाले सभी ऐप्लिकेशन की डिफ़ॉल्ट थीम (इसके लिए, targetSdkVersion या minSdkVersion से “14" या उससे ज़्यादा) अब "डिवाइस की डिफ़ॉल्ट सेटिंग" थीम: Theme.DeviceDefault. यह इनमें से कोई भी हो सकता है गहरे रंग वाली हॉलो थीम या किसी डिवाइस के हिसाब से तय की गई कोई दूसरी गहरे रंग वाली थीम.

इस बात की गारंटी है कि Theme.Holo में मौजूद थीम में कोई बदलाव नहीं होगा Android का एक ही वर्शन चलाते समय एक डिवाइस से दूसरे डिवाइस पर स्विच करें. अगर आपने साफ़ तौर पर अपनी गतिविधियों में कोई भी Theme.Holo थीम लागू करें भरोसा रखें, इन थीम की वजह से एक ही डिवाइस में अलग-अलग डिवाइसों पर कैरेक्टर नहीं बदलेगा प्लैटफ़ॉर्म वर्शन है.

अगर आपको अपने ऐप्लिकेशन को डिवाइस की पूरी थीम के मुताबिक बनाना है (जैसे कि अलग-अलग OEM पर सिस्टम के लिए अलग-अलग डिफ़ॉल्ट थीम उपलब्ध कराएं), तो आपको Theme.DeviceDefault फ़ैमिली से थीम को साफ़ तौर पर लागू करना चाहिए.

विकल्प मेन्यू बटन

Android 4.0 से शुरू करते हुए, आप देखेंगे कि हैंडसेट के लिए अब मेन्यू हार्डवेयर बटन की ज़रूरत नहीं होती. हालांकि, अगर आपका मौजूदा ऐप्लिकेशन विकल्प मेन्यू उपलब्ध कराता है और उम्मीद करता है कि उसे मेन्यू बटन. यह पक्का करने के लिए कि मौजूदा ऐप्लिकेशन उम्मीद के मुताबिक काम करते रहें, सिस्टम Android के पुराने वर्शन के लिए डिज़ाइन किए गए ऐप्लिकेशन के लिए, स्क्रीन पर दिखने वाला मेन्यू बटन.

बेहतरीन उपयोगकर्ता अनुभव के लिए, नए और अपडेट किए गए ऐप्लिकेशन को मेन्यू आइटम का ऐक्सेस देने के लिए, ActionBar का इस्तेमाल करना चाहिए. साथ ही, targetSdkVersion को इस पर सेट करना चाहिए: "14" पर क्लिक करें.

सिस्टम यूज़र इंटरफ़ेस (यूआई) दिखने के लिए कंट्रोल

Android के शुरुआती दिनों से ही यह सिस्टम, यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट को मैनेज करता है. इस कॉम्पोनेंट को स्थिति बार होता है, जो मोबाइल और इंटरनेट सेवा देने वाली कंपनी जैसी जानकारी देने के लिए हैंडसेट डिवाइसों के सबसे ऊपर रहता है सिग्नल, समय, सूचनाएं वगैरह. Android 3.0 में टैबलेट के लिए सिस्टम बार जोड़ा गया डिवाइस, जो सिस्टम नेविगेशन कंट्रोल (होम, और आगे बताए गए हैं) के साथ-साथ उन एलिमेंट के लिए इंटरफ़ेस भी है जो पारंपरिक रूप से स्टेटस बार में दिए जाते हैं. तय सीमा में Android 4.0 में, सिस्टम एक नए तरह का सिस्टम यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराता है. इसे नेविगेशन बार कहते हैं. आपने लोगों तक पहुंचाया मुफ़्त में नेविगेशन बार को सिस्टम बार का वह वर्शन माना जा सकता है जिसे हैंडसेट—यह नेविगेशन कंट्रोल देता है के लिए, जिनमें सिस्टम को नेविगेट करने के लिए हार्डवेयर काउंटर नहीं हैं, लेकिन यह सिस्टम बार की सूचना का यूज़र इंटरफ़ेस (यूआई) और सेटिंग कंट्रोल. इसलिए, नेविगेशन प्रदान करने वाला कोई डिवाइस बार में सबसे ऊपर स्टेटस बार भी होता है.

आज तक, आप FLAG_FULLSCREEN फ़्लैग का इस्तेमाल करके हैंडसेट पर स्टेटस बार को छिपा सकते हैं. Android 4.0 में, जो API सिस्टम बार के काम करने के तरीके को बेहतर तरीके से दिखाने के लिए, सिस्टम बार की विज़िबिलिटी को अपडेट किया गया है और नेविगेशन बार:

  • SYSTEM_UI_FLAG_LOW_PROFILE फ़्लैग, STATUS_BAR_HIDDEN फ़्लैग की जगह ले लेता है. सेट होने पर, यह फ़्लैग "कम प्रोफ़ाइल" को चालू करता है मोड चालू करें या नेविगेशन बार. नेविगेशन बटन की रोशनी कम हो जाती है और सिस्टम बार में मौजूद दूसरे एलिमेंट भी छिप जाते हैं. सक्षम कर रहा है इससे सिस्टम नेविगेशन में किसी तरह की रुकावट के बिना, शानदार गेम बनाए जा सकते हैं बटन.
  • सिस्टम बार या नेविगेशन बार को दिखाने का अनुरोध करने के लिए, SYSTEM_UI_FLAG_VISIBLE फ़्लैग STATUS_BAR_VISIBLE फ़्लैग की जगह ले लेता है.
  • SYSTEM_UI_FLAG_HIDE_NAVIGATION एक नया फ़्लैग है, जो तो नेविगेशन बार पूरी तरह से छिप जाता है. ध्यान दें कि यह सुविधा सिर्फ़ नेविगेशन बार के लिए काम करती है इसका इस्तेमाल कुछ हैंडसेट से किया जाता है (यह टैबलेट पर सिस्टम बार को नहीं छिपाता नहीं है). नेविगेशन जैसे ही सिस्टम को उपयोगकर्ता इनपुट मिलता है, बार दिखाई देता है. ऐसे में, यह मोड उपयोगी है मुख्य रूप से वीडियो चलाने या ऐसे अन्य मामलों में जहां पूरी स्क्रीन की ज़रूरत होती है, लेकिन उपयोगकर्ता का इनपुट ज़रूरी नहीं है.

अपनी गतिविधि में किसी भी व्यू पर setSystemUiVisibility() को कॉल करके, सिस्टम बार और नेविगेशन बार के लिए इनमें से हर फ़्लैग सेट किया जा सकता है. कॉन्टेंट बनाने विंडो मैनेजर आपकी विंडो में सभी व्यू से आने वाली सभी फ़्लैग को (या एक साथ) जोड़ता है और जब तक आपकी विंडो में इनपुट फ़ोकस मौजूद हो, तब तक उन्हें सिस्टम यूज़र इंटरफ़ेस (यूआई) पर लागू करें. विंडो से इनपुट बंद हो जाने पर ध्यान दें (जब उपयोगकर्ता आपके ऐप्लिकेशन से किसी दूसरी जगह पर जाए या उसे एक डायलॉग दिखे), तो आपके फ़्लैग का असर खत्म हो जाएगा. इसी तरह, अगर व्यू हैरारकी से उन व्यू को हटाया जाता है, तो उनके फ़्लैग लागू नहीं होंगे.

आपकी गतिविधि के अन्य इवेंट को सिस्टम यूज़र इंटरफ़ेस (यूआई) में 'किसको दिखे' सेटिंग में बदलाव के साथ सिंक करने के लिए (इसके लिए उदाहरण के लिए, सिस्टम के यूआई के छिपने पर, ऐक्शन बार या दूसरे यूज़र इंटरफ़ेस (यूआई) कंट्रोल छिपाएं), तो आपको 'किसको दिखे' सेटिंग कब दिखेगी, इस बारे में सूचना पाने के लिए View.OnSystemUiVisibilityChangeListener में बदलाव दिखेंगे.

OverscanActivity क्लास की मदद से, सिस्टम के यूज़र इंटरफ़ेस (यूआई) के अलग-अलग विकल्पों को दिखाया जा सकता है.

इनपुट फ़्रेमवर्क

Android 4.0 कर्सर होवर इवेंट और नए स्टाइलस और माउस बटन इवेंट के लिए सहायता जोड़ता है.

इवेंट पर कर्सर घुमाएं

View क्लास अब "होवर करें" के साथ काम करती है बेहतर इंटरैक्शन की सुविधा चालू करने के लिए इवेंट उपयोगकर्ता, पॉइंटर डिवाइसों (जैसे कि माउस या अन्य डिवाइस जो ऑन-स्क्रीन ड्राइव करते हैं) का इस्तेमाल करते हैं कर्सर).

किसी व्यू पर होवर इवेंट पाने के लिए, View.OnHoverListener लागू करें और setOnHoverListener() पर रजिस्टर करें. कर्सर घुमाने पर व्यू में कोई इवेंट होता है, तो आपके सुनने वाले को onHover() पर एक कॉल आता है. इसके लिए, View आपको इवेंट मिला. साथ ही, एक MotionEvent मिला है जिसमें होवर इवेंट के टाइप के बारे में बताया गया है जो हुआ. होवर इवेंट इनमें से कोई एक हो सकता है:

अगर आपका View.OnHoverListener, होवर इवेंट को हैंडल करता है, तो onHover() से सही दिखना चाहिए. अगर आपके लिसनर 'गलत' दिखाता है, फिर होवर इवेंट हमेशा की तरह पैरंट व्यू पर भेज दिया जाएगा.

यदि आपका एप्लिकेशन ऐसे बटन या अन्य विजेट का उपयोग करता है जो मौजूदा स्थिति है, तो अब आप ड्रॉ की जा सकने वाली राज्य सूची में android:state_hovered एट्रिब्यूट का इस्तेमाल कर सकते हैं कर्सर को व्यू पर घुमाने पर, एक अलग बैकग्राउंड ड्रॉ किया जा सकता है.

नए होवर इवेंट के प्रदर्शन के लिए, इसमें होवर क्लास देखें ApiDemos.

स्टाइलस और माउस बटन के इवेंट

Android अब स्टाइलस इनपुट डिवाइस, जैसे कि डिजिटाइज़र से इनपुट पाने के लिए एपीआई उपलब्ध कराता है टैबलेट के लिए सहायक डिवाइस (जैसे, कीबोर्ड, माउस, मॉनिटर, वेबकैम वगैरह) या स्टाइलस की सुविधा वाली टचस्क्रीन.

स्टाइलस इनपुट, टच या माउस इनपुट की तरह ही काम करता है. जब स्टाइलस संपर्क में हो डिजिटाइज़र के साथ, एप्लिकेशन टच इवेंट वैसे ही प्राप्त होते हैं, जैसे वे अंगुलियों के उपयोग किए जाने पर करते हैं डिसप्ले को छुएं. जब स्टाइलस डिजिटाइज़र के ऊपर कर्सर घुमाता है, तब ऐप्लिकेशन पर कर्सर घुमाने पर सूचना मिलती है इवेंट बिलकुल वैसे ही होते हैं जैसे वे तब होते हैं, जब कोई बटन न होने पर माउस पॉइंटर को डिस्प्ले पर ले जाया जा रहा हो दबाए गए हैं.

आपका ऐप्लिकेशन उंगली, माउस, स्टाइलस, और इरेज़र इनपुट के बीच अंतर कर सकता है. “टूल टाइप" getToolType() का इस्तेमाल करके, MotionEvent में हर पॉइंटर से जुड़ा होता है. फ़िलहाल, बताए गए टूल टाइप ये हैं: TOOL_TYPE_UNKNOWN, TOOL_TYPE_FINGER, TOOL_TYPE_MOUSE, TOOL_TYPE_STYLUS, और TOOL_TYPE_ERASER. टूल टाइप की क्वेरी करके, आपका ऐप्लिकेशन स्टाइलस इनपुट को उंगली या माउस इनपुट से अलग-अलग तरीकों से हैंडल करना चुन सकते हैं.

“बटन” राज्य" getButtonState() का इस्तेमाल करके, MotionEvent में से. बटन की इन स्थितियों के बारे में फ़िलहाल बताया गया है: BUTTON_PRIMARY, BUTTON_SECONDARY, BUTTON_TERTIARY, BUTTON_BACK, और BUTTON_FORWARD. सुविधा के लिए, पीछे और आगे के माउस बटन KEYCODE_BACK और KEYCODE_FORWARD बटनों के साथ अपने-आप मैप हो गया है. आपका ऐप्लिकेशन समर्थन करने के लिए इन कुंजियों को प्रबंधित कर सकता है पीछे और आगे के नेविगेशन पर आधारित माउस बटन.

किसी संपर्क की स्थिति और दबाव को सटीक तरीके से मापने के अलावा, स्टाइलस का भी इस्तेमाल किया जा सकता है ये डिवाइस, स्टाइलस टिप और डिजिटाइज़र के बीच की दूरी, स्टाइलस झुकाने के ऐंगल, और स्टाइलस के ओरिएंटेशन का ऐंगल भी देखें. आपका ऐप्लिकेशन, ऐक्सिस कोड AXIS_DISTANCE, AXIS_TILT, और AXIS_ORIENTATION का इस्तेमाल करके, getAxisValue() का इस्तेमाल करके इस जानकारी के लिए क्वेरी कर सकता है.

टूल के टाइप, बटन की स्थितियों, और नए ऐक्सिस कोड के बारे में जानने के लिए, TouchPaint देखें ApiDemos में क्लास.

प्रॉपर्टी

नई Property क्लास प्रॉपर्टी सेट कर देता है, जिसकी मदद से कॉलर सामान्य रूप से टारगेट ऑब्जेक्ट पर वैल्यू सेट कर सकते हैं/पाएंगी. यह भी फ़ील्ड/मेथड के रेफ़रंस को पास करने की और कोड को वैल्यू सेट करने/पाने की अनुमति देता है प्रॉपर्टी इस्तेमाल करने की अनुमति दें.

उदाहरण के लिए, अगर आपको foo ऑब्जेक्ट पर फ़ील्ड bar की वैल्यू सेट करनी है, तो पहले यह काम किया:

Kotlin

foo.bar = value

Java

foo.bar = value;

अगर किसी मौजूदा प्राइवेट फ़ील्ड bar के लिए सेटर को कॉल करना है, तो यह करें:

Kotlin

foo.setBar(value)

Java

foo.setBar(value);

हालांकि, अगर आपको foo इंस्टेंस को पास करना है और कोई दूसरा कोड सेट करना है, तो bar मान है, Android 4.0 से पहले ऐसा करने का कोई तरीका नहीं है.

Property क्लास का इस्तेमाल करके, Property का एलान किया जा सकता है क्लास Foo पर ऑब्जेक्ट BAR ताकि आप फ़ील्ड को, उदाहरण foo पर सेट कर सकें क्लास Foo को इस तरह देखें:

Kotlin

BAR.set(foo, value)

Java

BAR.set(foo, value);

View क्लास अब Property क्लास का इस्तेमाल इन कामों के लिए करती है आपको कई फ़ील्ड सेट करने की सुविधा मिलती है, जैसे ट्रांसफ़ॉर्म प्रॉपर्टी को Android 3.0 (ROTATION, ROTATION_X, TRANSLATION_X वगैरह) में जोड़ा गया था.

ObjectAnimator क्लास भी Property का इस्तेमाल करती है क्लास का इस्तेमाल किया जा सकता है, ताकि आप Property का इस्तेमाल करके ObjectAnimator बना सकें. यह स्ट्रिंग-आधारित टूल से ज़्यादा तेज़, बेहतर, और टाइप-सुरक्षित है अप्रोच का इस्तेमाल करें.

हार्डवेयर ऐक्सेलरेशन

Android 4.0 से, सभी विंडो के लिए हार्डवेयर से तेज़ी लाने की सुविधा डिफ़ॉल्ट रूप से चालू रहती है, अगर ऐप्लिकेशन ने या तो targetSdkVersion को सेट किया है या minSdkVersion से “14" या उससे ज़्यादा. आम तौर पर, हार्डवेयर की मदद से तेज़ी लाने की वजह से, ऐनिमेशन स्मूद और मज़ेदार तरीके से दिखते हैं और बेहतर परफ़ॉर्मेंस के साथ-साथ यूज़र इंटरैक्शन पर प्रतिक्रिया देने के लिए इस्तेमाल किया जा सकता है.

अगर ज़रूरी हो, तो hardwareAccelerated का इस्तेमाल करके, हार्डवेयर की मदद से तेज़ी लाने की सुविधा को मैन्युअल तरीके से बंद किया जा सकता है अलग-अलग <activity> एलिमेंट या <application> के लिए एट्रिब्यूट एलिमेंट. इसके अलावा, setLayerType(LAYER_TYPE_SOFTWARE) पर कॉल करके अलग-अलग व्यू के लिए, हार्डवेयर की मदद से तेज़ी लाने की सुविधा बंद की जा सकती है.

हार्डवेयर की मदद से तेज़ी लाने के बारे में ज़्यादा जानकारी के लिए, जिसमें ऐसी ड्रॉइंग की सूची भी शामिल है जो इस्तेमाल नहीं की जा सकती कार्रवाइयों के बारे में जानने के लिए, हार्डवेयर ऐक्सेलरेशन दस्तावेज़.

JNI के बदलाव

Android के पिछले वर्शन में, JNI स्थानीय संदर्भ अप्रत्यक्ष हैंडल नहीं थे; Android का इस्तेमाल किया गया डायरेक्ट पॉइंटर. यह कोई समस्या नहीं थी, जब तक कि कचरा इकट्ठा करने वाला व्यक्ति, चीज़ों को इधर-उधर नहीं ले जाता लगता है कि काम कर रहा है क्योंकि इससे बग्गी कोड लिखना संभव हो गया है. Android 4.0 में, यह सिस्टम अब ताकि इन गड़बड़ियों का पता लगाया जा सके.

JNI के स्थानीय संदर्भ की पूरी जानकारी को "स्थानीय और वैश्विक संदर्भ" में बताया गया है JNI Tips में शामिल है. Android 4.0 में, इन गड़बड़ियों का पता लगाने के लिए, CheckJNI को बेहतर बना दिया गया है. आने वाली पोस्ट के लिए Android डेवलपर ब्लॉग देखें के बारे में जानें.

जेएनआई लागू करने में किया गया यह बदलाव सिर्फ़ उन ऐप्लिकेशन पर असर डालता है जो Android 4.0 को टारगेट करते हैं. ऐसा करने के लिए, targetSdkVersion या minSdkVersion से “14" या उससे ज़्यादा. अगर आपने इन एट्रिब्यूट की कम वैल्यू सेट की है, तो तो JNI लोकल संदर्भ, पिछले वर्शन की तरह ही काम करते हैं.

WebKit

  • WebKit को वर्शन 534.30 में अपडेट किया गया
  • इंडिक फ़ॉन्ट (देवनागरी, बांग्ला, और तमिल) के साथ काम करने की सुविधा. इसमें मुश्किल वर्णों वाले फ़ॉन्ट भी शामिल हैं WebView और बिल्ट-इन ब्राउज़र में glyphs को मिलाने के लिए ज़रूरी है
  • WebView में इथियोपिक, जॉर्जियन, और आर्मेनियन फ़ॉन्ट के लिए सहायता पहले से मौजूद ब्राउज़र
  • WebDriver का इस्तेमाल करने पर इससे WebView का इस्तेमाल करने वाले ऐप्लिकेशन को आसानी से टेस्ट किया जा सकता है

Android ब्राउज़र

ब्राउज़र ऐप्लिकेशन, वेब ऐप्लिकेशन पर काम करने के लिए ये सुविधाएं जोड़ता है:

अनुमतियां

ये नई अनुमतियां हैं:

  • ADD_VOICEMAIL: वॉइसमेल सेवा को वॉइसमेल जोड़ने की अनुमति देता है डिवाइस पर मैसेज भेजना.
  • BIND_TEXT_SERVICE: SpellCheckerService को लागू करने वाली सेवा को भी इस अनुमति की ज़रूरत होगी.
  • BIND_VPN_SERVICE: VpnService को लागू करने वाली सेवा को भी इस अनुमति की ज़रूरत होगी.
  • android.Manifest.permission#READ_PROFILE: इससे, ContactsContract.Profile की सेवा देने वाली कंपनी को पढ़ने का ऐक्सेस मिलता है.
  • android.Manifest.permission#WRITE_PROFILE: यह सेवा, ContactsContract.Profile की सेवा देने वाली कंपनी को लिखने का ऐक्सेस देती है.

डिवाइस की सुविधाएं

डिवाइस की नई सुविधाएं इस तरह हैं:

  • FEATURE_WIFI_DIRECT: इससे पता चलता है कि ऐप्लिकेशन उपयोग पीयर-टू-पीयर कम्यूनिकेशन के लिए वाई-फ़ाई.

Android 4.0 (एपीआई लेवल) में, एपीआई में हुए सभी बदलावों की पूरी जानकारी पाने के लिए 14), एपीआई में अंतर की रिपोर्ट देखें.

पिछले एपीआई

ऊपर बताई गई सभी सुविधाओं के अलावा, Android 4.0, पिछली रिलीज़ के सभी एपीआई के साथ काम करता है. क्योंकि Android 3.x प्लेटफ़ॉर्म केवल बड़ी स्क्रीन वाले उपकरणों के लिए ही उपलब्ध है, यदि आपके पास मुख्य रूप से हैंडसेट के लिए डेवलप किया जा रहा हो, तो हो सकता है कि आपको Android में जोड़े गए सभी एपीआई के बारे में जानकारी न हो हाल ही में रिलीज़ किए गए कॉन्टेंट में.

यहां कुछ ऐसे सबसे खास एपीआई दिए गए हैं जो हो सकता है कि आपसे छूट गए हों और अब उपलब्ध हैं हैंडसेट पर भी:

Android 3.0
  • Fragment: एक फ़्रेमवर्क कॉम्पोनेंट, जिसकी मदद से किसी गतिविधि के एलिमेंट को सेल्फ़-कंटेन्ड मॉड्यूल में इकट्ठा करता है, जो उसका यूज़र इंटरफ़ेस (यूआई) और लाइफ़साइकल तय करता है. ज़्यादा जानकारी के लिए, फ़्रैगमेंट डेवलपर गाइड.
  • ActionBar: इसकी जगह पारंपरिक टाइटल बार सबसे ऊपर मौजूद है गतिविधि विंडो. इसमें बाएं कोने में ऐप्लिकेशन का लोगो शामिल होता है और मेन्यू आइटम के लिए इंटरफ़ेस. ज़्यादा जानकारी के लिए, कार्रवाई बार डेवलपर गाइड.
  • Loader: एक फ़्रेमवर्क कॉम्पोनेंट जो एसिंक्रोनस की सुविधा देता है डेटा को ब्लॉक किए बिना डेटा को डाइनैमिक तरीके से लोड करने के लिए, यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट के साथ डेटा लोड करना मुख्य थ्रेड. ज़्यादा जानकारी के लिए, लोडर डेवलपर गाइड.
  • सिस्टम क्लिपबोर्ड: ऐप्लिकेशन यहां से डेटा (सिर्फ़ टेक्स्ट के अलावा) कॉपी करके चिपका सकते हैं क्लिपबोर्ड पर क्लिक करें. क्लिप किया गया डेटा सादा टेक्स्ट, यूआरआई या इंटेंट हो सकता है. ज़्यादा जानकारी के लिए, कॉपी करें और चिपकाएं डेवलपर गाइड.
  • खींचें और छोड़ें: व्यू फ़्रेमवर्क में बनाए गए एपीआई का सेट, जो खींचने और छोड़ने की सुविधा देता है कार्रवाइयां. ज़्यादा जानकारी के लिए, खींचें और छोड़ें डेवलपर गाइड.
  • इस नए और सुविधाजनक ऐनिमेशन फ़्रेमवर्क की मदद से, किसी भी प्रॉपर्टी की आर्बिट्रेरी प्रॉपर्टी को ऐनिमेट किया जा सकता है ऑब्जेक्ट (व्यू, ड्रॉ करने लायक, फ़्रैगमेंट, ऑब्जेक्ट या कुछ और) से जुड़ा हो और ऐनिमेशन के पहलुओं को अवधि, इंटरपोलेशन, दोहराव और बहुत कुछ के रूप में. नए फ़्रेमवर्क से Android में ऐनिमेशन बनाए जाते हैं पहले से ज़्यादा आसान हो गया है. ज़्यादा जानकारी के लिए, प्रॉपर्टी ऐनिमेशन डेवलपर पढ़ें.
  • RenderScript ग्राफ़िक्स और कंप्यूट इंजन: RenderScript बेहतरीन परफ़ॉर्मेंस वाला 3D ऑफ़र करता है नेटिव लेवल पर ग्राफ़िक्स रेंडरिंग और कंप्यूट एपीआई को C (C99 स्टैंडर्ड) में लिखा जाता है. पोर्टेबल होने के दौरान, नेटिव एनवायरमेंट से आपकी उम्मीद के मुताबिक परफ़ॉर्मेंस उपलब्ध कराता है कई तरह के सीपीयू और जीपीयू पर काम करता है. ज़्यादा जानकारी के लिए, RenderScript डेवलपर पढ़ें.
  • हार्डवेयर त्वरित 2D ग्राफ़िक्स: अब आप अपने ब्राउज़र के लिए OpenGL रेंडरर सक्षम कर सकते हैं अपने मेनिफ़ेस्ट एलिमेंट के <application> में {android:hardwareAccelerated="true"} को सेट करके ऐप्लिकेशन एलिमेंट या व्यक्तिगत <activity> के लिए एलिमेंट. यह नतीजा और आसान ऐनिमेशन, आसानी से स्क्रोल करने की सुविधा, और बेहतर परफ़ॉर्मेंस के साथ-साथ लोगों को जवाब देने की सुविधा भी मिलती है इंटरैक्शन.

    ध्यान दें: अगर आप अपने ऐप्लिकेशन के minSdkVersion या targetSdkVersion को इस पर सेट करते हैं "14" या इसके बाद के वर्शन में, हार्डवेयर से तेज़ी लाने की सुविधा डिफ़ॉल्ट रूप से चालू होती है.

  • साथ ही और भी बहुत कुछ. Android 3.0 प्लैटफ़ॉर्म देखें नोट पढ़ें.
Android 3.1
  • यूएसबी एपीआई: कनेक्ट किए गए सहायक डिवाइसों (जैसे, कीबोर्ड, माउस, मॉनिटर, वेबकैम वगैरह) के साथ इंटिग्रेट करने के लिए, बेहतरीन नए एपीआई Android ऐप्लिकेशन. ये एपीआई, यूएसबी स्टैक और ऐसी सेवाओं पर आधारित होते हैं जो इसमें यूएसबी होस्ट और डिवाइस से इंटरैक्शन, दोनों की सुविधा शामिल है. यूएसबी होस्ट और ऐक्सेसरी डेवलपर गाइड देखें.
  • MTP/PTP API: ऐप्लिकेशन सीधे कनेक्ट किए गए कैमरों और अन्य PTP के साथ इंटरैक्ट कर सकते हैं डिवाइसों के अटैच होने और हटाए जाने पर सूचना पाने के लिए, इन डिवाइसों पर फ़ाइलें और स्टोरेज मैनेज करें और उनसे फ़ाइलों और मेटाडेटा को ट्रांसफ़र किया जा सकता है. MTP API, पीटीपी को लागू करता है MTP (मीडिया ट्रांसफ़र प्रोटोकॉल) स्पेसिफ़िकेशन का (पिक्चर ट्रांसफ़र प्रोटोकॉल) सबसेट. ज़्यादा जानकारी के लिए, android.mtp दस्तावेज़.
  • RTP API: Android, ऐप्लिकेशन में पहले से मौजूद आरटीपी (रीयल-टाइम ट्रांसपोर्ट प्रोटोकॉल) स्टैक में एपीआई उपलब्ध कराता है, मांग पर या इंटरैक्टिव डेटा स्ट्रीमिंग को मैनेज करने के लिए, किन ऐप्लिकेशन का इस्तेमाल किया जा सकता है. खास तौर पर, ऐप्लिकेशन जो वीओआईपी, पुश-टू-टॉक, कॉन्फ़्रेंसिंग, और ऑडियो स्ट्रीमिंग जैसी सुविधाएं देते हैं और किसी भी उपलब्ध नेटवर्क पर डेटा स्ट्रीम को ट्रांसमिट या पा सकते हैं. android.net.rtp दस्तावेज़ देखें.
  • जॉयस्टिक और अन्य सामान्य मोशन इनपुट के साथ काम करता है.
  • Android 3.1 प्लैटफ़ॉर्म देखें नोट करें.
Android 3.2
  • नई स्क्रीन पर ऐसे एपीआई काम करते हैं जो आपको अपने ऐप्लिकेशन पर ज़्यादा कंट्रोल देते हैं जो अलग-अलग साइज़ की स्क्रीन पर दिखाए जाते हैं. यह एपीआई, स्क्रीन के मौजूदा सपोर्ट मॉडल को डाइमेंशन के हिसाब से, स्क्रीन के खास साइज़ की रेंज को सटीक तरीके से टारगेट करने की क्षमता डेंसिटी-इंडिपेंडेंट पिक्सल यूनिट (जैसे कि 600dp या 720dp चौड़ी), न कि उनके सामान्य वर्शन स्क्रीन साइज़ (जैसे कि बड़ा या बहुत बड़ा). उदाहरण के लिए, आपकी मदद करने के लिए यह ज़रूरी है 5" के बीच का अंतर बताएं डिवाइस और 7" डिवाइस, जिसे पारंपरिक रूप से दोनों बकेट के रूप में बकेट किया जाता है "बड़ा" स्क्रीन. यह ब्लॉग पोस्ट देखें, स्क्रीन के साइज़ मैनेज करने के लिए नए टूल.
  • <uses-feature> के लिए नए कॉन्सटेंट लैंडस्केप या पोर्ट्रेट स्क्रीन ओरिएंटेशन की ज़रूरी शर्तों के बारे में बताया गया हो.
  • डिवाइस का "स्क्रीन का साइज़" स्क्रीन ओरिएंटेशन के दौरान अब कॉन्फ़िगरेशन बदल जाता है बदलें. अगर आपका ऐप्लिकेशन, एपीआई लेवल 13 या उसके बाद के लेवल को टारगेट करता है, तो आपको "screenSize" को मैनेज करना होगा कॉन्फ़िगरेशन में बदलाव. ऐसा तब करें, जब आपको "orientation" के कॉन्फ़िगरेशन में किए गए बदलाव को भी मैनेज करना हो. यहां जाएं: ज़्यादा जानकारी के लिए, android:configChanges.
  • Android 3.2 प्लैटफ़ॉर्म देखें अन्य नए API के लिए नोट.

एपीआई लेवल

Android 4.0 API को एक पूर्णांक असाइन किया गया है आइडेंटिफ़ायर—14—जिसे सिस्टम में ही सेव किया जाता है. "एपीआई लेवल" कहे जाने वाले इस आइडेंटिफ़ायर की मदद से, सिस्टम को सही तरीके से यह तय करने में मदद मिलती है कि ऐप्लिकेशन के इंस्टॉल होने से पहले ही, ऐप्लिकेशन सिस्टम के साथ काम करता हो.

अपने ऐप्लिकेशन में Android 4.0 में प्रस्तुत किए गए API का उपयोग करने के लिए, आपको ऐसे Android प्लैटफ़ॉर्म पर चलने वाला ऐप्लिकेशन है जो एपीआई लेवल 14 पर काम करता है या उच्च. अपनी ज़रूरतों के आधार पर, आपको किसी एक android:minSdkVersion="14" एट्रिब्यूट की वैल्यू के तौर पर <uses-sdk> एलिमेंट.

ज़्यादा जानकारी के लिए, एपीआई क्या है, यह पढ़ें लेवल?