Android 4.1 API

एपीआई लेवल: 16

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

ऐप्लिकेशन डेवलपर के रूप में, Android 4.1 आपके लिए SDK मैनेजर का इस्तेमाल, सिस्टम इमेज के तौर पर किया जा सकता है. ऐप्लिकेशन को Android एम्युलेटर और SDK टूल पर लॉन्च किया जा सकता है. आपको ऐसा करना चाहिए अपने एपीआई को बनाने और उसकी जांच करने के लिए, सिस्टम इमेज और प्लैटफ़ॉर्म को जल्द से जल्द डाउनलोड करें Android 4.1 वर्शन पर काम करता है.

Android 4.1 चलाने वाले डिवाइसों के लिए अपने ऐप को बेहतर ढंग से ऑप्टिमाइज़ करने के लिए, आपको अपने targetSdkVersion को "16", इसे Android 4.1 सिस्टम इमेज पर इंस्टॉल करें, इसकी जांच करें, फिर इस बदलाव के साथ अपडेट पब्लिश करें.

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

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

ऐप्लिकेशन के कॉम्पोनेंट

आइसोलेटेड सेवाएं

android:isolatedProcess="true" को इसमें तय करके <service> टैग, आपका Service ऐसा करने की अनुमति नहीं है.

मेमोरी मैनेज करना

TRIM_MEMORY_RUNNING_LOW और TRIM_MEMORY_RUNNING_CRITICAL जैसे नए ComponentCallbacks2 कॉन्सटेंट, फ़ोरग्राउंड का इस्तेमाल करते हैं इसके बारे में ज़्यादा जानकारी प्रोसेस करता है सिस्टम से onLowMemory() को कॉल करने से पहले की मेमोरी की स्थिति.

getMyMemoryState(ActivityManager.RunningAppProcessInfo) के नए तरीके से, ये काम किए जा सकते हैं सामान्य मेमोरी स्थिति को फिर से पाने के लिए.

कॉन्टेंट देने वाले ऐप्लिकेशन

acquireUnstableContentProviderClient() नाम का एक नया तरीका, आपको ContentProviderClient को ऐक्सेस करने की अनुमति देता है, जो कि "अस्टेबल" हो सकती है ताकि आपका ऐप्लिकेशन क्रैश न हो, अगर कॉन्टेंट देने वाले भी सोर्स हैं. यह तब काम आता है, जब कॉन्टेंट देने वालों के साथ अलग से बातचीत की जा रही हो है.

लाइव वॉलपेपर

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

लाइव वॉलपेपर पिकर लॉन्च करने के लिए, इसका इस्तेमाल करके Intent के साथ startActivity() को कॉल करें ACTION_CHANGE_LIVE_WALLPAPER और अन्य जो EXTRA_LIVE_WALLPAPER_COMPONENT में आपके लाइव वॉलपेपर ComponentName को स्ट्रिंग के तौर पर दिखाता है.

ऐप्लिकेशन स्टैक नेविगेशन

Android 4.1, अप नेविगेशन के लिए सही डिज़ाइन पैटर्न लागू करना बहुत आसान बनाता है. आपको बस हर <activity> एलिमेंट में android:parentActivityName को जोड़ना होगा को अपलोड करने की ज़रूरत नहीं है. सिस्टम इस जानकारी का इस्तेमाल, सही गतिविधि को खोलने के लिए करता है. ऐसा तब होता है, जब उपयोगकर्ता कार्रवाई बार में अप बटन को दबाता है (मौजूदा गतिविधि को भी पूरा करते हुए). इसलिए, अगर हर गतिविधि के लिए android:parentActivityName का एलान करें, आपको क्लिक मैनेज करने के लिए onOptionsItemSelected() तरीके की ज़रूरत नहीं है पर क्लिक करती हैं—तो सिस्टम अब उस इवेंट को हैंडल करके उसे फिर से शुरू कर देता है या उचित गतिविधि बनाता है.

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

ध्यान दें: जब उपयोगकर्ता आपके ऐप्लिकेशन में कोई डीप गतिविधि डालता है और यह आपके ऐप्लिकेशन के लिए एक नया टास्क बनाता है. सिस्टम असल में, माता-पिता की गतिविधियों का स्टैक शामिल करता है टास्क में शामिल करें. इस तरह, 'वापस जाएं' बटन दबाने पर, पैरंट ग्रुप के स्टैक पर भी वापस जाया जा सकता है गतिविधियां.

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

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

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

onNavigateUp()
उपयोगकर्ता के अप बटन दबाने पर, इसे कस्टम ऐक्शन करने के लिए, इसे बदलें.
navigateUpTo(Intent)
मौजूदा गतिविधि को पूरा करने के लिए इसे कॉल करें और Intent सप्लाई की गई. अगर गतिविधि पिछली गतिविधियों में मौजूद है, लेकिन सबसे नज़दीकी माता-पिता नहीं है. इसके बाद, मौजूदा गतिविधि और इस इंटेंट के साथ तय की गई गतिविधि भी पूरी हो चुकी है.
getParentActivityIntent()
इसे कॉल करके Intent पाएं, जो लॉजिकल शुरू करेगी मौजूदा गतिविधि के लिए पैरंट.
shouldUpRecreateTask(Intent)
इसे कॉल करके क्वेरी करें कि नेविगेट करने के लिए, सिंथेटिक बैक स्टैक बनाना ज़रूरी है या नहीं ऊपर. अगर सिंथेटिक स्टैक बनाया जाना चाहिए, तो 'सही' दिखाता है. अगर सही स्टैक बनाया जाता है, तो यह गलत होता है पहले से मौजूद है.
finishAffinity()
इसे कॉल करके मौजूदा गतिविधि और माता-पिता की सभी गतिविधियों को एक ही तरह से पूरा करें मौजूदा गतिविधि से जुड़े टास्क अफ़िनिटी. अगर डिफ़ॉल्ट ऐक्शन को बदला जाता है, जैसे कि onNavigateUp(), आपको इस तरीके को तब कॉल करना चाहिए, जब अप नेविगेशन पर सिंथेटिक बैक स्टैक बनाएं.
onCreateNavigateUpTaskStack
अगर आपको सिंथेटिक टास्क स्टैक बनाने का तरीका पूरी तरह से कंट्रोल करना है, तो इसे बदलें. अगर आपको अपने बैक स्टैक के इंटेंट में कुछ और डेटा जोड़ना है, तो आपको onPrepareNavigateUpTaskStack() को बदलना चाहिए

हालांकि, ज़्यादातर ऐप्लिकेशन को इन एपीआई का इस्तेमाल करने या onPrepareNavigateUpTaskStack() को लागू करने की ज़रूरत नहीं होती. हालांकि, ये काम आसान तरीके से कर सकते हैं हर <activity> एलिमेंट में android:parentActivityName जोड़ना.

मल्टीमीडिया

मीडिया कोडेक

MediaCodec क्लास, कोड में बदलने के तरीके के लिए लो-लेवल मीडिया कोडेक का ऐक्सेस देती है डीकोड करने के कई तरीके हैं. मीडिया को कोड में बदलने के लिए, createEncoderByType() पर कॉल करके MediaCodec को इंस्टैंशिएट किया जा सकता है या मीडिया को डिकोड करने के लिए createDecoderByType() पर कॉल किया जा सकता है. इनमें से सभी तरीकों में, ऐसे मीडिया टाइप के लिए MIME टाइप लिया जाता है जिसे आपको एन्कोड या डिकोड करना है. जैसे, "video/3gpp" या "audio/vorbis".

इसके बाद, MediaCodec का इंस्टेंस बनाकर, configure() को कॉल करके प्रॉपर्टी की जानकारी दी जा सकती है. जैसे, मीडिया फ़ॉर्मैट या भले ही कॉन्टेंट एन्क्रिप्ट (सुरक्षित) किया गया हो या नहीं.

चाहे आप अपने मीडिया को एन्कोड या डीकोड कर रहे हों, आपके बाद की बाकी प्रक्रिया वही रहती है MediaCodec बनाएं. ByteBuffer इनपुट का कलेक्शन पाने के लिए, पहले getInputBuffers() को कॉल करें ऑब्जेक्ट और getOutputBuffers() का इस्तेमाल करके, आउटपुट ByteBuffer ऑब्जेक्ट का कलेक्शन पाएं.

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

इसी तरह आउटपुट बफ़र के लिए, ByteBuffer की इंडेक्स स्थिति पाने के लिए dequeueOutputBuffer() को कॉल करें जहां आपको नतीजे मिलेंगे. ByteBuffer से मिले आउटपुट को पढ़ने के बाद, releaseOutputBuffer() पर कॉल करके मालिकाना हक वापस लें.

आप इसके साथ queueSecureInputBuffer() को कॉल करके, कोडेक में एन्क्रिप्ट (सुरक्षित) किया गया मीडिया मैनेज कर सकते हैं सामान्य queueInputBuffer() के बजाय, MediaCrypto API का इस्तेमाल किया जा सकता है.

कोडेक इस्तेमाल करने के तरीके के बारे में ज़्यादा जानने के लिए, MediaCodec दस्तावेज़ देखें.

क्यू पर ऑडियो रिकॉर्ड करें

startRecording() नया तरीका इस्तेमाल करने की अनुमति देता है आपको MediaSyncEvent के बताए गए क्यू के आधार पर ऑडियो रिकॉर्डिंग शुरू करनी होगी. MediaSyncEvent से एक ऑडियो सेशन के बारे में पता चलता है (जैसे, MediaPlayer की मदद से तय किया गया पैरामीटर), जो पूरा होने पर ट्रिगर होता है ऑडियो रिकॉर्डर का इस्तेमाल करें. उदाहरण के लिए, इस सुविधा का इस्तेमाल कोई ऐसी ऑडियो टोन चलाएं जो किसी रिकॉर्डिंग सेशन और रिकॉर्डिंग की शुरुआत के बारे में बताती हो अपने-आप शुरू हो जाता है, ताकि आपको टोन और शुरुआत को मैन्युअल रूप से रिकॉर्ड किया जा सकता है.

टाइम्ड टेक्स्ट ट्रैक

MediaPlayer अब इन-बैंड और आउट-ऑफ़-बैंड टेक्स्ट ट्रैक, दोनों को हैंडल करता है. इन-बैंड टेक्स्ट ट्रैक, MP4 या 3GPP मीडिया सोर्स में, टेक्स्ट ट्रैक के तौर पर आते हैं. आउट-ऑफ़-बैंड टेक्स्ट addTimedTextSource() तरीके से, ट्रैक को एक्सटर्नल टेक्स्ट सोर्स के तौर पर जोड़ा जा सकता है. सभी एक्सटर्नल टेक्स्ट के बाद ट्रैक स्रोत जोड़ दिए गए हैं, तो पाने के लिए getTrackInfo() को कॉल किया जाना चाहिए किसी डेटा सोर्स में सभी उपलब्ध ट्रैक की रीफ़्रेश की गई सूची.

ट्रैक को MediaPlayer के साथ इस्तेमाल करने के लिए, आपको: इंडेक्स का इस्तेमाल करके, selectTrack() को कॉल करें ट्रैक करें जिसका आपको इस्तेमाल करना है.

जब टेक्स्ट ट्रैक चलाए जाने के लिए तैयार हो, तब सूचना पाने के लिए, MediaPlayer.OnTimedTextListener इंटरफ़ेस और पास setOnTimedTextListener() के लिए.

ऑडियो प्रभाव

AudioEffect क्लास अब अतिरिक्त ऑडियो के साथ काम करती है ऑडियो कैप्चर करते समय, प्री-प्रोसेसिंग के टाइप:

  • AcousticEchoCanceler के साथ अकूस्टिक इको रद्द करने वाला (एईसी) कैप्चर किए गए ऑडियो सिग्नल से, रिमोट पार्टी के सिग्नल के योगदान को हटाता है.
  • AutomaticGainControl के साथ अपने-आप कंट्रोल गेन कंट्रोल (AGC) कैप्चर किए गए सिग्नल के आउटपुट को अपने-आप नॉर्मलाइज़ कर देता है.
  • NoiseSuppressor के साथ नॉइज़ सप्रेसर (NS) कैप्चर किए गए सिग्नल से बैकग्राउंड का शोर हटाता है.

AudioEffect में से किसी एक का इस्तेमाल करके, AudioRecord से कैप्चर किए गए ऑडियो पर, प्री-प्रोसेसर इफ़ेक्ट लागू किए जा सकते हैं सब-क्लास हैं.

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

गैपलेस प्लेबैक

अब दो अलग-अलग डिवाइसों के बीच बिना किसी रुकावट के वीडियो चलाया जा सकता है MediaPlayer ऑब्जेक्ट. पहला MediaPlayer खत्म होने से पहले, किसी भी समय, setNextMediaPlayer() और Android को कॉल करें जब पहला प्लेयर रुक जाए, तब दूसरे प्लेयर को चालू करने की कोशिश करता है.

मीडिया राऊटर. नए एपीआई MediaRouter, MediaRouteActionProvider, और MediaRouteButton में जोड़े गए हैं स्टैंडर्ड मैकेनिज़्म और यूज़र इंटरफ़ेस (यूआई) की मदद से, यह तय किया जा सकता है कि मीडिया कहां चलाना है.

कैमरा

ऑटो फ़ोकस मूवमेंट

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

कैमरे का साउंड

MediaActionSound क्लास, एपीआई का एक आसान सेट उपलब्ध कराती है. कैमरे या मीडिया की दूसरी कार्रवाइयों से आने वाली मानक आवाज़ें. गेम खेलने के लिए, आपको इन एपीआई का इस्तेमाल करना चाहिए कस्टम स्टिल या वीडियो कैमरा बनाते समय सही आवाज़ का इस्तेमाल किया जा सकता है.

ध्वनि चलाने के लिए, बस MediaActionSound ऑब्जेक्ट को इंस्टैंशिएट करें, कॉल करें अपनी पसंद के साउंड को पहले से लोड करने के लिए, load() करें. इसके बाद, सही समय है, play() पर कॉल करें.

कनेक्टिविटी

Android बीम

Android बीमTM अब ब्लूटूथ के ज़रिए बड़े पेलोड ट्रांसफ़र के साथ काम करता है. जब आप डेटा तय करते हैं नए setBeamPushUris() से ट्रांसफ़र करने के लिए तरीका या नया कॉलबैक इंटरफ़ेस NfcAdapter.CreateBeamUrisCallback, Android डेटा ट्रांसफ़र को ब्लूटूथ या किसी दूसरे डिवाइस पर ट्रांसफ़र कर देता है तेज़ ट्रांसफ़र स्पीड पाने में मदद मिलती है. यह विशेष रूप से बड़े पेलोड के लिए उपयोगी होता है, जैसे कि चित्र और और साथ ही, इन्हें डिवाइस के बीच जोड़ने की ज़रूरत नहीं होती. इसके लिए आपको कुछ और करने की ज़रूरत नहीं है ब्लूटूथ के ज़रिए ट्रांसफ़र की सुविधा का फ़ायदा उठाएं.

setBeamPushUris() तरीका Uri ऑब्जेक्ट जो ऐसे डेटा के बारे में बताते हैं जिसे आपको अपने ऐप्लिकेशन से ट्रांसफ़र करना है. इसके अलावा, आपके पास NfcAdapter.CreateBeamUrisCallback को लागू करने का विकल्प भी है इंटरफ़ेस, जिसे आप setBeamPushUrisCallback() पर कॉल करके अपनी गतिविधि के बारे में बता सकते हैं.

इसका इस्तेमाल करते समय: कॉलबैक इंटरफ़ेस, सिस्टम इंटरफ़ेस की createBeamUris() विधि को तब कॉल करता है, जब उपयोगकर्ता, Android बीम के साथ किसी शेयर को एक्ज़ीक्यूट करता है, ताकि आप शेयर करते समय शेयर करने के लिए यूआरआई तय कर सकें. यह तब उपयोगी होता है, जब शेयर किए जाने वाले यूआरआई, गतिविधि है, जबकि setBeamPushUris() को कॉल करना है यह तब उपयोगी होता है, जब शेयर किए जाने वाले यूआरआई में बदलाव न होता हो और आपके पास उन्हें सुरक्षित तरीके से पहले ही तय करने का विकल्प हो.

नेटवर्क सेवा खोज

Android 4.1, मल्टीकास्ट डीएनएस-आधारित सेवा खोज के लिए सहायता जोड़ता है, जिससे आप ये काम कर सकते हैं: वाई-फ़ाई के ज़रिए मिलते-जुलते डिवाइसों से मिलने वाली सेवाओं को खोजें और उनसे कनेक्ट करें. जैसे, मोबाइल डिवाइस लोकल नेटवर्क पर रजिस्टर किए गए प्रिंटर, कैमरे, मीडिया प्लेयर वगैरह.

नए पैकेज android.net.nsd में ऐसे नए एपीआई शामिल हैं जो आपको ये काम करने की अनुमति देते हैं लोकल नेटवर्क पर अपनी सेवाएँ ब्रॉडकास्ट करें, नेटवर्क पर लोकल डिवाइसों को खोजें, और डिवाइसों से कनेक्ट करो.

अपनी सेवा को रजिस्टर करने के लिए, पहले आपको एक NsdServiceInfo बनाना होगा ऑब्जेक्ट बनाएं और अपनी सेवा की विभिन्न प्रॉपर्टी को setServiceName(), setServiceType(), और setPort().

इसके बाद, आपको NsdManager.RegistrationListener लागू करना होगा और उसे registerService() को भेज दें NsdServiceInfo के साथ.

नेटवर्क पर सेवाएं खोजने के लिए, NsdManager.DiscoveryListener को लागू करें और discoverServices() को पास करें.

जब आपके NsdManager.DiscoveryListener को सेवाओं के बारे में कॉलबैक मिलते हैं मिल गया है, तो आपको कॉल करके सेवा का समाधान करना होगा resolveService() की वजह से NsdManager.ResolveListener को लागू करने की वजह से एक NsdServiceInfo ऑब्जेक्ट जिसमें सेवा की पहचान की है, जो आपको कनेक्शन शुरू करने की अनुमति देती है.

वाई-फ़ाई P2P सेवा की खोज

वाई-फ़ाई P2P API को Android 4.1 में बेहतर बनाया गया है, ताकि प्री-असोसिएशन सेवा में खोज की जा सके WifiP2pManager. इससे आपको आस-पास की जगहें खोजने और फ़िल्टर करने में मदद मिलती है नेटवर्क सेवा से कनेक्ट करने से पहले वाई-फ़ाई P2P का इस्तेमाल करने वाली सेवाओं के हिसाब से डिवाइस 'डिस्कवरी' आपको किसी मौजूदा कनेक्ट किए गए नेटवर्क (जैसे कि स्थानीय वाई-फ़ाई) पर सेवा खोजने की सुविधा देता है नेटवर्क) शामिल है.

वाई-फ़ाई के ज़रिए अपने ऐप्लिकेशन को सेवा के तौर पर ब्रॉडकास्ट करना, ताकि अन्य डिवाइस उसे कनेक्ट करने के लिए, addLocalService() को कॉल करें WifiP2pServiceInfo ऑब्जेक्ट जो आपके ऐप्लिकेशन की सेवाओं के बारे में बताता है.

वाई-फ़ाई के ज़रिए आस-पास मौजूद डिवाइसों को खोजने के लिए, आपको पहले यह तय करना होगा कि आपको Bonjour या Upnp का इस्तेमाल करके, बातचीत करना. Bonjour का इस्तेमाल करने के लिए, पहले इनके साथ कुछ कॉलबैक लिसनर सेट अप करें setDnsSdResponseListeners(), जिसमें WifiP2pManager.DnsSdServiceResponseListener और WifiP2pManager.DnsSdTxtRecordListener, दोनों लगते हैं. Upnp का इस्तेमाल करने के लिए, कॉल करें setUpnpServiceResponseListener(), जिसमें WifiP2pManager.UpnpServiceResponseListener की ज़रूरत होती है.

स्थानीय डिवाइसों पर सेवाएं खोजना शुरू करने से पहले, आपको addServiceRequest() को कॉल करना होगा. जब इस तरीके से WifiP2pManager.ActionListener को पास किया जाता है, तो कॉलबैक हो जाता है, तो discoverServices() को कॉल करके लोकल डिवाइसों पर सेवाएं खोजी जा सकती हैं.

जब स्थानीय सेवाएं मिलती हैं, तो आपको WifiP2pManager.DnsSdServiceResponseListener या WifiP2pManager.UpnpServiceResponseListener पर कॉलबैक मिलेगा. यह इस बात पर निर्भर करता है कि Bonjour या Upnp का इस्तेमाल करने के लिए रजिस्टर है. दोनों में से किसी भी मामले में मिले कॉलबैक में WifiP2pDevice ऑब्जेक्ट, मिलते-जुलते डिवाइस की जानकारी दिखा रहा है.

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

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

सुलभता

Accessibility Service API

Android 4.1 में Accessibility Service API की पहुंच काफ़ी बढ़ गई है. इसे अभी करें आपको ऐसी सेवाएं बनाने की अनुमति मिलती है जो ज़्यादा इनपुट इवेंट की निगरानी करती हैं और उनका जवाब देती हैं, जैसे कि मुश्किल जेस्चर onGesture() और अन्य तरीके का इस्तेमाल किया जा रहा है AccessibilityEvent, AccessibilityNodeInfo, और AccessibilityRecord क्लास को जोड़कर, इवेंट इनपुट करें.

सुलभता सेवाएं उपयोगकर्ता की ओर से कार्रवाइयां भी कर सकती हैं. इनमें वीडियो पर क्लिक करना, performAction और setMovementGranularities का इस्तेमाल करके, टेक्स्ट को स्क्रोल करना और उसके सेक्शन में जाना. performGlobalAction() तरीका सेवाओं को वापस जाएँ, होम पेज, और 'हाल ही की' खोलने जैसी कार्रवाइयाँ करने की अनुमति भी दें ऐप्लिकेशन और सूचनाएं.

पसंद के मुताबिक बनाया जा सकने वाला ऐप्लिकेशन नेविगेशन

Android ऐप्लिकेशन बनाते समय, अब फ़ोकस करने लायक विकल्प ढूंढकर, नेविगेशन स्कीम को पसंद के मुताबिक बनाया जा सकता है findFocus() और focusSearch() का इस्तेमाल करके एलिमेंट और इनपुट विजेट जोड़ें. साथ ही, फ़ोकस सेट करें setAccessibilityFocused() का इस्तेमाल करके.

आसानी से ऐक्सेस किए जा सकने वाले विजेट

नई android.view.accessibility.AccessibilityNodeProvider क्लास आपको ये काम करने की सुविधा देती है सुलभता सेवाओं को जटिल कस्टम व्यू दिखाने की सुविधा, ताकि वे जानकारी को को ज़्यादा सुलभ बनाना है. android.view.accessibility.AccessibilityNodeProvider, उपयोगकर्ता को कैलेंडर ग्रिड जैसे बेहतर कॉन्टेंट वाला विजेट, जो लॉजिकल सिमैंटिक स्ट्रक्चर पेश करे ऐसी सुलभता सेवाएं हैं जो विजेट के लेआउट से पूरी तरह अलग हैं. यह सिमैंटिक स्ट्रक्चर की मदद से, सुलभता सेवाओं को उन उपयोगकर्ताओं के लिए ज़्यादा काम का इंटरैक्शन मॉडल पेश करने में मदद मिलती है जो दृष्टिबाधित.

कॉपी करें और चिपकाएं

इंटेंट के साथ कॉपी करें और चिपकाएं

अब आपके पास setClipData() तरीके का इस्तेमाल करके, ClipData ऑब्जेक्ट को Intent से जोड़ने का विकल्प है. यह खास तौर पर तब काम आता है, जब किसी इंटेंट का इस्तेमाल करके एक से ज़्यादा content: यूआरआई को दूसरे में ट्रांसफ़र किया जाता है जैसे, कई दस्तावेज़ शेयर किए जाते समय. content: यूआरआई की जानकारी दी गई यह तरीका पढ़ने या लिखने का ऐक्सेस ऑफ़र करने के लिए, इंटेंट के फ़्लैग का भी पालन करेगा. इससे आपको अपने इंटेंट में एक से ज़्यादा यूआरआई का ऐक्सेस दें. ACTION_SEND या ACTION_SEND_MULTIPLE इंटेंट से शुरू करने पर, इंटेंट में दिए गए यूआरआई अब होते हैं ClipData में अपने-आप लागू हो जाता है, ताकि पाने वाला उन्हें ऐक्सेस दिया गया हो.

एचटीएमएल और स्ट्रिंग स्टाइल के साथ काम करता है

ClipData क्लास अब स्टाइल टेक्स्ट (एचटीएमएल या Android स्टाइल स्ट्रिंग). newHtmlText() की मदद से, ClipData में एचटीएमएल स्टाइल वाला टेक्स्ट जोड़ा जा सकता है.

रेंडरस्क्रिप्ट

इन सुविधाओं की मदद से, रेंडर स्क्रिप्ट कंप्यूटेशन (हिसाब लगाना) की सुविधा को बेहतर बना दिया गया है:

  • एक स्क्रिप्ट में कई कर्नेल के लिए समर्थन.
  • नए स्क्रिप्ट एपीआई में, कंप्यूट से फ़िल्टर किए गए सैंपलर की मदद से ऐलोकेशन से पढ़ने की सुविधा rsSample.
  • #pragma में FP की सटीक जानकारी के अलग-अलग लेवल के साथ काम करता है.
  • कंप्यूट स्क्रिप्ट की मदद से आरएस ऑब्जेक्ट से ज़्यादा जानकारी की क्वेरी करने के लिए सहायता.
  • परफ़ॉर्मेंस में कई सुधार किए गए.

आपके लिए ज़रूरी फ़्लोटिंग पॉइंट सटीक तय करने के लिए, नए प्रग्मा भी उपलब्ध हैं कंप्यूट रेंडरस्क्रिप्ट. इससे आपको NEON जैसे ऑपरेशन (जैसे, फ़ास्ट वेक्टर मैथ ऑपरेशन) चालू करने की सुविधा मिलती है जो पूरी तरह आईईईई 754-2008 मानक के साथ आम तौर पर संभव नहीं होता.

ध्यान दें: फ़िलहाल, Renderscript ग्राफ़िक इंजन की परफ़ॉर्मेंस की जांच की जा रही है बंद कर दिया गया है.

ऐनिमेशन

ऐक्टिविटी लॉन्च ऐनिमेशन

अब ज़ूम ऐनिमेशन का इस्तेमाल करके Activity लॉन्च किया जा सकता है या कस्टम ऐनिमेशन बनाने की सुविधा मिलती है. अपना मनचाहा ऐनिमेशन तय करने के लिए, ActivityOptions एपीआई का इस्तेमाल करके Bundle बनाएं, ताकि आप यह कर सकें तो वह किसी गतिविधि को शुरू करने वाले तरीके, जैसे कि startActivity().

ActivityOptions क्लास में हर क्लास के लिए अलग तरीका होता है ऐनिमेशन का प्रकार, जिसे शायद आप गतिविधि के खुलने पर दिखाना चाहें:

makeScaleUpAnimation()
एक ऐसा ऐनिमेशन बनाता है जो तय की गई शुरुआत की गतिविधि विंडो को स्केल अप करता है स्क्रीन पर पोज़िशन में और तय किया गया शुरुआती साइज़. उदाहरण के लिए, होम स्क्रीन पर किसी ऐप्लिकेशन को खोलते समय, Android 4.1 इसका इस्तेमाल करता है.
makeThumbnailScaleUpAnimation()
एक ऐसा ऐनिमेशन बनाता है जो बताए गए लक्ष्य से शुरू होने वाली गतिविधि विंडो को स्केल करता है पोज़िशन और दी गई थंबनेल इमेज. उदाहरण के लिए, हाल ही में खोले गए ऐप्लिकेशन की विंडो किसी ऐप्लिकेशन पर वापस जाते समय, Android 4.1 इसका इस्तेमाल करता है.
makeCustomAnimation()
आपके संसाधनों के ज़रिए तय किया गया ऐनिमेशन बनाता है: ऐसा ऐनिमेशन जो गतिविधि शुरू होने और बंद होने की अन्य स्थिति.

टाइम ऐनिमेटर

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

यूज़र इंटरफ़ेस

सूचनाएं

Android 4.1 में, आप बड़े सामग्री क्षेत्रों, बड़े चित्र पूर्वावलोकनों, कई ऐक्शन बटन और कॉन्फ़िगर करने लायक प्राथमिकता की सुविधा मिलती है.

सूचना के स्टाइल

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

Notification.BigPictureStyle
ऐसी सूचनाएं जिनमें इमेज वाला बड़ा अटैचमेंट शामिल हो.
Notification.BigTextStyle
ऐसी सूचनाएं जिनमें बहुत ज़्यादा मैसेज शामिल होते हैं, जैसे कि कोई एक ईमेल.
Notification.InboxStyle
ऐसी सूचनाओं के लिए जिनमें स्ट्रिंग की सूची शामिल होती है, जैसे कि एक से ज़्यादा ईमेल के स्निपेट.
सूचना क्रियाएं

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

ऐक्शन बटन जोड़ने के लिए, addAction() पर कॉल करें. इस तरीके में तीन आर्ग्युमेंट इस्तेमाल किए जाते हैं: किसी आइकॉन के लिए ड्रॉ करने लायक संसाधन, बटन के लिए टेक्स्ट और कार्रवाई को परिभाषित करने वाला PendingIntent उपयोगकर्ता हासिल कर पाते हैं.

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

अब आप सिस्टम को यह संकेत दे सकते हैं कि आपकी सूचना सूची में अपनी सूचना का क्रम सेट करें और setPriority() को प्राथमिकता दें. आपने लोगों तक पहुंचाया मुफ़्त में PRIORITY_* कॉन्सटेंट के आधार पर तय किए गए, पांच अलग-अलग प्राथमिकता लेवल में से किसी एक को पास कर सकता है Notification क्लास में डिफ़ॉल्ट वैल्यू PRIORITY_DEFAULT है. इसमें दो लेवल ज़्यादा और दो लेवल कम हैं.

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

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

सिस्टम यूज़र इंटरफ़ेस (यूआई) की दृश्यता नियंत्रित करने के लिए Android 4.0 (Ice Cream पॉइंट) नए फ़्लैग जोड़े गए हैं तत्व, जैसे सिस्टम बार के रंग-रूप को मद्धम करना या उसे हैंडसेट पर पूरी तरह से गायब करना. Android 4.1 में कुछ और फ़्लैग जोड़े जाते हैं, जिनसे आप सिस्टम के रंग-रूप को और भी ज़्यादा नियंत्रित कर सकते हैं यूज़र इंटरफ़ेस (यूआई) एलिमेंट और उनसे जुड़ी आपकी गतिविधि का लेआउट. इसके लिए, setSystemUiVisibility() को कॉल करें और ये फ़्लैग पास करना ज़रूरी है:

SYSTEM_UI_FLAG_FULLSCREEN
गैर-ज़रूरी सिस्टम यूज़र इंटरफ़ेस (यूआई) छिपाता है, जैसे कि स्टेटस बार. अगर आपकी गतिविधि ओवरले मोड में कार्रवाई बार का इस्तेमाल करती है (इसके हिसाब से) android:windowActionBarOverlay को चालू करता है), तो यह फ़्लैग कार्रवाई बार को भी छिपा देता है और इसलिए, यह भी ध्यान रखें कि दोनों को छिपाते और दिखाते समय एक ही ऐनिमेशन का इस्तेमाल किया जा सकता है.
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
आपके गतिविधि लेआउट को उसी स्क्रीन क्षेत्र का उपयोग करने के लिए सेट करता है, जो उस समय उपलब्ध होता है सिस्टम के यूज़र इंटरफ़ेस (यूआई) एलिमेंट के बावजूद, SYSTEM_UI_FLAG_FULLSCREEN को चालू किया गया अभी भी दिखाई दे रहे हैं. हालांकि आपके लेआउट के कुछ हिस्से सिस्टम यूज़र इंटरफ़ेस (यूआई) में बदलना है, तो यह तब फ़ायदेमंद होता है, जब आपका ऐप्लिकेशन अक्सर सिस्टम यूज़र इंटरफ़ेस (यूआई) को छिपाता है और SYSTEM_UI_FLAG_FULLSCREEN, क्योंकि यह आपके लेआउट से बचाता है: हर बार सिस्टम यूज़र इंटरफ़ेस (यूआई) छिपने या दिखने पर, नई लेआउट सीमा के मुताबिक अडजस्ट हो जाता है.
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
आपके गतिविधि लेआउट को उसी स्क्रीन क्षेत्र का उपयोग करने के लिए सेट करता है, जो उस समय उपलब्ध होता है सक्षम SYSTEM_UI_FLAG_HIDE_NAVIGATION (Android 4.0 में जोड़ा गया) भले ही सिस्टम के यूआई एलिमेंट अब भी दिख रहे हों. हालांकि, आपके लेआउट के कुछ हिस्से अतिरिक्त शुल्क के आधार पर यह सुविधा तब काम आती है, जब आपका ऐप्लिकेशन अक्सर नेविगेशन बार को छिपाता और दिखाता है SYSTEM_UI_FLAG_HIDE_NAVIGATION के साथ, क्योंकि यह आपके लेआउट से बचाता है: हर बार नेविगेशन बार के छिपने या दिखाई देने पर, यह नई लेआउट सीमा के हिसाब से अडजस्ट हो जाता है.
SYSTEM_UI_FLAG_LAYOUT_STABLE
यदि आप SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN और/या SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION का उपयोग कर रहे हैं, तो कॉल करते समय यह सुनिश्चित करने के लिए कि आप यह फ़्लैग जोड़ना चाहें fitSystemWindows() देखते हैं कि तय की गई सीमाएं, उपलब्ध स्क्रीन स्पेस के हिसाब से एक जैसी रहती हैं. इसका मतलब है कि इस फ़्लैग सेट के साथ, fitSystemWindows() ऐसे काम करेगा जैसे कि सिस्टम के यूज़र इंटरफ़ेस (यूआई) एलिमेंट के दिखने की सेटिंग में कोई बदलाव नहीं हुआ है भले ही आप सभी सिस्टम यूज़र इंटरफ़ेस (यूआई) छिपा दें.

अन्य संबंधित सिस्टम यूज़र इंटरफ़ेस (यूआई) फ़्लैग के बारे में ज़्यादा चर्चा करने के लिए, इसके बारे में पढ़ें जो Android 4.0 में जोड़े गए हैं.

रिमोट व्यू

GridLayout और ViewStub अब रिमोटेबल व्यू हैं, इसलिए आप इन्हें अपने लेआउट में इस्तेमाल कर सकते हैं ऐप विजेट और सूचना कस्टम लेआउट.

फ़ॉन्ट फ़ैमिली

Android 4.1 में Roboto फ़ॉन्ट स्टाइल के कई और वैरिएंट जोड़े गए हैं. ऐसा कुल 10 वैरिएंट के लिए किया गया है, और वे सभी ऐप्लिकेशन में इस्तेमाल किए जा सकते हैं. आपके ऐप्लिकेशन अब लाइट और कम किए गए वैरिएंट.

Roboto फ़ॉन्ट के उपलब्ध वैरिएंट का पूरा सेट इस तरह का है:

  • सामान्य
  • इटैलिक
  • बोल्ड
  • बोल्ड-इटैलिक
  • हल्का
  • हल्का-इटैलिक
  • कंडेंस्ड रेगुलर
  • कंडेंस्ड इटैलिक
  • कंडेंस्ड बोल्ड
  • कंडेंस्ड बोल्ड-इटैलिक

fontFamily के नए वर्शन पर इनमें से किसी भी सुविधा को लागू किया जा सकता है एट्रिब्यूट के साथ textStyle एट्रिब्यूट का इस्तेमाल करें.

fontFamily फ़ंक्शन के लिए, ये वैल्यू इस्तेमाल की जा सकती हैं:

  • सामान्य रोबोटो के लिए "sans-serif"
  • Roboto Light के लिए "sans-serif-light"
  • Roboto Condensed के लिए "sans-serif-condensed"

इसके बाद, textStyle वैल्यू के साथ बोल्ड और/या इटैलिक टेक्स्ट लागू किया जा सकता है "bold" और "italic". आप ऐसे दोनों तरीके लागू कर सकते हैं: android:textStyle="bold|italic".

Typeface.create() का भी इस्तेमाल किया जा सकता है. उदाहरण के लिए, Typeface.create("sans-serif-light", Typeface.NORMAL).

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

कई इनपुट डिवाइस

नई InputManager क्लास की मदद से, नए डिवाइस के कनेक्ट होने की सूचना पाने के लिए रजिस्टर किए गए और मौजूदा इनपुट डिवाइसों का सेट जोड़ा, बदला या हटाया गया है. यह खास तौर पर तब मददगार होता है, जब कोई गेम बनाया जा रहा हो जिसमें एक से ज़्यादा प्लेयर का इस्तेमाल किया जा सकता हो और आपको यह पता लगाना हो कि कितने कंट्रोलर कनेक्ट किए गए हैं कंट्रोलर की संख्या में बदलाव होने पर.

कॉल करके कनेक्ट किए गए सभी इनपुट डिवाइसों को क्वेरी की जा सकती है getInputDeviceIds(). इससे रिटर्न पूर्णांकों की एक श्रेणी, जिनमें से हर एक अलग इनपुट डिवाइस का आईडी है. इसके बाद, आप कॉल कर सकते हैं हासिल करने के लिए getInputDevice() किसी दिए गए इनपुट डिवाइस आईडी के लिए InputDevice.

अगर नए इनपुट डिवाइस कनेक्ट होने, बदलने या डिसकनेक्ट होने पर सूचना चाहिए, तो InputManager.InputDeviceListener इंटरफ़ेस लागू करें और registerInputDeviceListener() पर रजिस्टर करें.

इनपुट कंट्रोलर के लिए वाइब्रेट हो

अगर कनेक्ट किए गए इनपुट डिवाइस में वाइब्रेशन की क्षमताएं हैं, तो अब कंट्रोल किया जा सकता है सिर्फ़ मौजूदा Vibrator एपीआई का इस्तेमाल करके उन डिवाइसों पर वाइब्रेशन InputDevice पर getVibrator() को कॉल करके.

अनुमतियां

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

READ_EXTERNAL_STORAGE
बाहरी स्टोरेज को सुरक्षित रीड ऐक्सेस देता है. Android 4.1 में इसके लिए डिफ़ॉल्ट सभी ऐप्लिकेशन ने अब भी पढ़ लिया है ऐक्सेस दें. इसे आने वाली रिलीज़ में बदल दिया जाएगा, ताकि ऐप्लिकेशन साफ़ तौर पर इसके लिए अनुरोध कर सकें पढ़ने का ऐक्सेस देने के लिए तैयार है. अगर आपका ऐप्लिकेशन पहले से ही लिखने का ऐक्सेस मांगता है, तो उसे अपने-आप पढ़ने का ऐक्सेस भी मिल जाता है. पढ़ने का ऐक्सेस चालू करने के लिए, डेवलपर के लिए एक नया विकल्प उपलब्ध है पाबंदी है. इससे डेवलपर अपने ऐप्लिकेशन की जांच कर सकते हैं कि Android ऐप्लिकेशन आने वाले समय में इस्तेमाल करें.
android.Manifest.permission.READ_USER_DICTIONARY
इससे किसी ऐप्लिकेशन को उपयोगकर्ता शब्दकोश पढ़ने की अनुमति मिलती है. इसकी ज़रूरत सिर्फ़ IME या सेटिंग ऐप्लिकेशन जैसा डिक्शनरी एडिटर.
READ_CALL_LOG
इससे ऐप्लिकेशन को सिस्टम का कॉल लॉग पढ़ने की अनुमति मिलती है, जिसमें इनकमिंग और आउटगोइंग कॉल.
WRITE_CALL_LOG
इससे ऐप्लिकेशन, आपके फ़ोन में सेव किए गए सिस्टम के कॉल लॉग में बदलाव कर सकता है
android.Manifest.permission.WRITE_USER_DICTIONARY
ऐप्लिकेशन को उपयोगकर्ता के शब्दकोश में लिखने की अनुमति देता है.

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

Android 4.1 में, खास तौर पर काम करने वाले डिवाइसों के लिए नई सुविधाओं का एलान किया गया है टेलीविज़न स्क्रीन पर यूज़र इंटरफ़ेस दिखाने के लिए: FEATURE_TELEVISION. यह बताने के लिए कि आपके ऐप्लिकेशन को टेलीविज़न इंटरफ़ेस हो, तो अपनी मेनिफ़ेस्ट फ़ाइल में <uses-feature> एलिमेंट की मदद से इस सुविधा के बारे में बताएं:

<manifest ... >
    <uses-feature android:name="android.hardware.type.television"
                  android:required="true" />
    ...
</manifest>

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