Android 11 में, डेवलपर के लिए बेहतरीन नई सुविधाएं और एपीआई जोड़े गए हैं. नीचे दिए गए सेक्शन, अपने ऐप्लिकेशन की सुविधाओं के बारे में जानने और इनसे जुड़े एपीआई का इस्तेमाल शुरू करने में आपकी मदद करते हैं.
नए, बदले गए, और हटाए गए एपीआई की पूरी सूची के लिए, एपीआई के बीच अंतर की रिपोर्ट पढ़ें. नए एपीआई के बारे में जानकारी पाने के लिए, Android एपीआई का रेफ़रंस देखें. नए एपीआई को हाइलाइट किया गया है, ताकि उन्हें आसानी से देखा जा सके. साथ ही, जिन जगहों पर प्लैटफ़ॉर्म में हुए बदलावों से आपके ऐप्लिकेशन पर असर पड़ सकता है उनके बारे में जानने के लिए, Android R को टारगेट करने वाले ऐप्लिकेशन और सभी ऐप्लिकेशन के लिए, Android 11 के काम करने के तरीके में हुए बदलावों के साथ-साथ निजता से जुड़े बदलावों के बारे में ज़रूर जानें.
नए अनुभव
डिवाइस कंट्रोल
Android 11 में एक नया ControlsProviderService
एपीआई शामिल है. इसका इस्तेमाल, कनेक्ट किए गए बाहरी डिवाइसों के कंट्रोल को दिखाने के लिए किया जा सकता है. ये कंट्रोल, Android के पावर मेन्यू में डिवाइस कंट्रोल में दिखते हैं. ज़्यादा जानकारी के लिए, बाहरी डिवाइसों को कंट्रोल करना लेख पढ़ें.
मीडिया कंट्रोल
Android 11 में, मीडिया कंट्रोल दिखने का तरीका अपडेट किया गया है. मीडिया कंट्रोल, क्विक सेटिंग के पास दिखते हैं. एक से ज़्यादा ऐप्लिकेशन के सेशन, स्वाइप किए जा सकने वाले कैरसेल में व्यवस्थित किए जाते हैं. इसमें फ़ोन पर स्थानीय तौर पर चल रही स्ट्रीम, रिमोट स्ट्रीम, जैसे कि बाहरी डिवाइसों पर या कास्ट सेशन पर पता लगाई गई स्ट्रीम, और पिछले सेशन शामिल होते हैं. ये सेशन, पिछले बार चलाए जाने के क्रम में फिर से शुरू किए जा सकते हैं.
उपयोगकर्ता, ऐप्लिकेशन को शुरू किए बिना ही कैरसेल से पिछले सेशन को रीस्टार्ट कर सकते हैं. वीडियो चलने के बाद, उपयोगकर्ता सामान्य तरीके से मीडिया कंट्रोल के साथ इंटरैक्ट कर सकता है.
ज़्यादा जानकारी के लिए, मीडिया कंट्रोल देखें.
स्क्रीन
वॉटरफ़ॉल डिसप्ले के लिए बेहतर सुविधा
Android 11 में वॉटरफ़ॉल डिसप्ले की सुविधा के लिए कई एपीआई मिलते हैं.
ये डिसप्ले, डिवाइस के किनारे वाले हिस्से पर मौजूद होते हैं. इन डिसप्ले को, डिसप्ले कटआउट वाले डिसप्ले के वैरिएंट के तौर पर माना जाता है. मौजूदा तरीकों से अब सेफ़ इनसेट मिलता है, ताकि वॉटरफ़ॉल वाले हिस्सों और कटआउट से बचा जा सके.DisplayCutout
.getSafeInset…()
अपने ऐप्लिकेशन के कॉन्टेंट को वॉटरफ़ॉल एरिया में रेंडर करने के लिए, यह तरीका अपनाएं:
वॉटरफ़ॉल इनसेट के सटीक डाइमेंशन पाने के लिए,
DisplayCutout.getWaterfallInsets()
को कॉल करें.विंडो लेआउट एट्रिब्यूट
layoutInDisplayCutoutMode
कोLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
पर सेट करें, ताकि विंडो को स्क्रीन के सभी किनारों पर कटआउट और वॉटरफ़ॉल एरिया तक बढ़ाया जा सके. आपको यह पक्का करना होगा कि कटआउट या वॉटरफ़ॉल वाले हिस्सों में कोई ज़रूरी कॉन्टेंट न हो.
हिंज ऐंगल सेंसर और फ़ोल्ड किए जा सकने वाले डिवाइस
Android 11 की मदद से, हिंज पर आधारित स्क्रीन कॉन्फ़िगरेशन वाले डिवाइसों पर चलने वाले ऐप्लिकेशन, हिंज के ऐंगल का पता लगा सकते हैं. इसके लिए, TYPE_HINGE_ANGLE
के साथ एक नया सेंसर और SensorEvent
के साथ एक नया सेंसर दिया जाता है. पहला सेंसर, हिंज के ऐंगल को मॉनिटर करता है और दूसरा सेंसर, डिवाइस के दो मुख्य हिस्सों के बीच के ऐंगल को डिग्री में मेज़र करता है. उपयोगकर्ता के डिवाइस को मैनिप्युलेट करने पर, ज़्यादा बारीक ऐनिमेशन दिखाने के लिए, इन रॉ मेज़रमेंट का इस्तेमाल किया जा सकता है.
फ़ोल्ड किए जा सकने वाले प्रॉडक्ट देखें.
बातचीत
बातचीत में सुधार
Android 11 में, बातचीत को मैनेज करने के तरीके में कई सुधार किए गए हैं. बातचीत, दो या उससे ज़्यादा लोगों के बीच रीयल-टाइम में होने वाली, दोनों तरफ़ से की जाने वाली बातचीत होती है. इन बातचीत को खास तौर पर अहमियत दी जाती है. साथ ही, लोगों के पास उनके साथ इंटरैक्ट करने के कई नए विकल्प होते हैं.
बातचीत और आपके ऐप्लिकेशन के लिए, बातचीत की सुविधा के इस्तेमाल के बारे में ज़्यादा जानने के लिए, लोग और बातचीत देखें.
चैट बबल
बबल्स की सुविधा अब डेवलपर के लिए उपलब्ध है. इससे पूरे सिस्टम में होने वाली बातचीत को दिखाने में मदद मिलती है. बबल की सुविधा, Android 10 की ऐसी सुविधा थी जिसे फ़िलहाल आज़माया जा रहा है. इसे डेवलपर के लिए उपलब्ध विकल्प की मदद से चालू किया गया था. Android 11 में अब इसकी ज़रूरत नहीं है.
अगर कोई ऐप्लिकेशन Android 11 (एपीआई लेवल 30) या उसके बाद के वर्शन को टारगेट करता है, तो उसकी सूचनाएं बबल के तौर पर तब तक नहीं दिखाई जातीं, जब तक वे बातचीत से जुड़ी नई ज़रूरी शर्तों को पूरा नहीं करतीं. खास तौर पर, सूचना किसी शॉर्टकट से जुड़ी होनी चाहिए.
Android 11 से पहले, अगर आपको किसी सूचना को बबल करना था, तो आपको साफ़ तौर पर बताना होगा कि सूचना को दस्तावेज़ के यूआई मोड में हमेशा लॉन्च होने के लिए सेट किया गया था. Android 11 से, आपको यह सेटिंग साफ़ तौर पर बनाने की ज़रूरत नहीं है. अगर सूचना को बबल में दिखाया जाता है, तो प्लैटफ़ॉर्म अपने-आप सूचना को दस्तावेज़ के यूज़र इंटरफ़ेस (यूआई) मोड में हमेशा लॉन्च करने के लिए सेट कर देता है.
बबल की परफ़ॉर्मेंस को बेहतर बनाने के लिए कई बदलाव किए गए हैं. साथ ही, उपयोगकर्ताओं के पास हर ऐप्लिकेशन के बबल को चालू और बंद करने का ज़्यादा विकल्प है. जिन डेवलपर ने एक्सपेरिमेंट के तौर पर बबल की सुविधा को लागू किया है उनके लिए, Android 11 में एपीआई में कुछ बदलाव किए गए हैं:
- बिना पैरामीटर वाला
BubbleMetadata.Builder()
कंस्ट्रक्टर अब काम नहीं करता है. इसके बजाय, दो नए कंस्ट्रक्टर में से किसी एक का इस्तेमाल करें:BubbleMetadata.Builder(PendingIntent, Icon)
याBubbleMetadata.Builder(String)
. BubbleMetadata.Builder(String)
को कॉल करके, शॉर्टकट आईडी सेBubbleMetadata
बनाएं. पास की गई स्ट्रिंग,Notification.Builder
के लिए दिए गए शॉर्टकट आईडी से मेल खानी चाहिए.Icon.createWithContentUri()
या नए तरीकेcreateWithAdaptiveBitmapContentUri()
का इस्तेमाल करके, बबल आइकॉन बनाएं.
5G के विज़ुअल इंडिकेटर
उपयोगकर्ताओं के डिवाइसों पर 5G इंडिकेटर दिखाने के बारे में जानने के लिए, अपने उपयोगकर्ताओं को बताएं कि वे 5G का इस्तेमाल कर रहे हैं लेख पढ़ें.
निजता
Android 11 में उपयोगकर्ता की निजता को बेहतर बनाने के लिए, कई बदलाव और पाबंदियां शामिल की गई हैं. ज़्यादा जानने के लिए, निजता पेज देखें.
सुरक्षा
बायोमेट्रिक से पुष्टि करने की सुविधा से जुड़े अपडेट
आपके ऐप्लिकेशन के डेटा की सुरक्षा के लेवल को कंट्रोल करने में आपकी मदद करने के लिए, Android 11 में बायोमेट्रिक तरीके से पुष्टि करने की सुविधा में कई सुधार किए गए हैं. ये बदलाव Jetpack बायोमेट्रिक लाइब्रेरी में भी दिखते हैं.
पुष्टि करने के तरीके
Android 11 में BiometricManager.Authenticators
इंटरफ़ेस को शामिल किया गया है. इसका इस्तेमाल करके, ऐप्लिकेशन में पुष्टि करने के उन तरीकों के बारे में बताया जा सकता है जिनका इस्तेमाल किया जा सकता है.
यह पता लगाना कि पुष्टि करने के लिए किस तरह का तरीका इस्तेमाल किया गया था
उपयोगकर्ता की पुष्टि होने के बाद, getAuthenticationType()
को कॉल करके यह देखा जा सकता है कि उपयोगकर्ता ने डिवाइस क्रेडेंशियल या बायोमेट्रिक क्रेडेंशियल का इस्तेमाल करके पुष्टि की है या नहीं.
हर बार इस्तेमाल करने पर पुष्टि करने वाली कुंजियों के लिए अतिरिक्त सहायता
Android 11 में, हर बार इस्तेमाल करने के लिए पुष्टि करने वाली कुंजियों का इस्तेमाल करके पुष्टि करने की सुविधा को बेहतर बनाया गया है.
अब काम न करने वाले तरीके
Android 11 में, इन तरीकों का इस्तेमाल नहीं किया जा सकता:
setDeviceCredentialAllowed()
तरीका.setUserAuthenticationValidityDurationSeconds()
तरीका.canAuthenticate()
का ओवरलोड हुआ वर्शन, जिसमें कोई तर्क नहीं होता है.
बड़े डेटासेट को सुरक्षित तरीके से शेयर करना
कुछ मामलों में, जैसे कि मशीन लर्निंग या मीडिया चलाने के लिए, हो सकता है कि आपका ऐप्लिकेशन किसी दूसरे ऐप्लिकेशन के बड़े डेटासेट का इस्तेमाल करना चाहे. Android के पिछले वर्शन में, आपके ऐप्लिकेशन और दूसरे ऐप्लिकेशन, दोनों को एक ही डेटासेट की अलग-अलग कॉपी डाउनलोड करनी पड़ती थी.
नेटवर्क और डिस्क, दोनों पर डेटा का दोहराव कम करने के लिए, Android 11 में शेयर किए गए डेटा ब्लॉब का इस्तेमाल करके, डिवाइस पर इन बड़े डेटासेट को कैश मेमोरी में सेव करने की सुविधा जोड़ी गई है. डेटासेट शेयर करने के बारे में ज़्यादा जानने के लिए, बड़े डेटासेट शेयर करने के बारे में पूरी जानकारी देखें.
उपयोगकर्ता के क्रेडेंशियल के बिना, ओटीए रीस्टार्ट करने के बाद, फ़ाइल के आधार पर एन्क्रिप्शन करना
डिवाइस पर ओटीए अपडेट पूरा होने और उसे रीस्टार्ट करने के बाद, क्रेडेंशियल से सुरक्षित स्टोरेज में मौजूद क्रेडेंशियल एन्क्रिप्ट की गई कुंजियां (सीई), फ़ाइल-आधारित एन्क्रिप्शन (एफ़बीई) ऑपरेशन के लिए तुरंत उपलब्ध हो जाती हैं. इसका मतलब है कि ओटीए अपडेट होने के बाद, आपका ऐप्लिकेशन ऐसी कार्रवाइयां फिर से शुरू कर सकता है जिनके लिए उपयोगकर्ता को अपना पिन, पैटर्न या पासवर्ड डालने से पहले CE कुंजियों की ज़रूरत होती है.
परफ़ॉर्मेंस और क्वालिटी
वायरलेस डीबगिंग
Android 11 में, Android डीबग ब्रिज (adb) की मदद से, अपने वर्कस्टेशन से ऐप्लिकेशन को वायरलेस तरीके से डिप्लॉय और डीबग करने की सुविधा मिलती है. उदाहरण के लिए, डिबग किए जा सकने वाले ऐप्लिकेशन को कई रिमोट डिवाइसों पर डिप्लॉय किया जा सकता है. इसके लिए, आपको अपने डिवाइस को यूएसबी के ज़रिए कनेक्ट करने की ज़रूरत नहीं पड़ेगी. साथ ही, आपको यूएसबी कनेक्शन से जुड़ी सामान्य समस्याओं, जैसे कि ड्राइवर इंस्टॉल करने से जुड़ी समस्याओं का सामना भी नहीं करना पड़ेगा. ज़्यादा जानकारी के लिए, हार्डवेयर डिवाइस पर ऐप्लिकेशन चलाना लेख पढ़ें.
ADB इंक्रीमेंटल APK इंस्टॉलेशन
किसी डिवाइस पर बड़े (2 जीबी से ज़्यादा) APK इंस्टॉल करने में काफ़ी समय लग सकता है. भले ही, ऐप्लिकेशन में सिर्फ़ एक छोटा बदलाव किया गया हो. ADB (Android Debug Bridge) इंक्रीमेंटल APK इंस्टॉलेशन की सुविधा, इस प्रोसेस को तेज़ कर देती है. यह सुविधा, ऐप्लिकेशन को लॉन्च करने के लिए ज़रूरत के मुताबिक APK इंस्टॉल करती है. साथ ही, बाकी डेटा को बैकग्राउंड में स्ट्रीम करती है. अगर आपके डिवाइस पर यह सुविधा काम करती है और आपने SDK Platform-Tools का नया वर्शन इंस्टॉल किया है, तो adb install
इस सुविधा का अपने-आप इस्तेमाल करेगा. अगर यह सुविधा काम नहीं करती है, तो डिफ़ॉल्ट रूप से इंस्टॉल करने का तरीका चुना जाता है.
इस सुविधा का इस्तेमाल करने के लिए, यहां दिए गए adb कमांड का इस्तेमाल करें. अगर डिवाइस पर इंक्रीमेंटल इंस्टॉलेशन की सुविधा काम नहीं करती है, तो कमांड काम नहीं करता और पूरी जानकारी प्रिंट करता है.
adb install --incremental
ADB इंक्रीमेंटल APK इंस्टॉल करने से पहले, आपको अपने APK पर हस्ताक्षर करना होगा और एक APK सिग्नेचर स्कीम v4 फ़ाइल बनानी होगी. इस सुविधा के काम करने के लिए, v4 सिग्नेचर फ़ाइल को APK के बगल में रखना ज़रूरी है.
नेटिव मेमोरी ऐलोकेटर का इस्तेमाल करके गड़बड़ी का पता लगाना
GWP-ASan, एक नेटिव मेमोरी ऐलोकेटर सुविधा है. इससे, इस्तेमाल के बाद बिना बदलाव किए और हीप-बफ़र-ओवरफ़्लो से जुड़ी गड़बड़ियों को ढूंढने में मदद मिलती है. इस सुविधा को दुनिया भर में या अपने ऐप्लिकेशन की कुछ सब-प्रोसेस के लिए चालू किया जा सकता है. ज़्यादा जानने के लिए, GWP-Asan गाइड देखें.
Neural Networks API 1.3
Android 11 में, न्यूरल नेटवर्क एपीआई (NNAPI) को बेहतर बनाया गया है और इसमें कई सुविधाएं जोड़ी गई हैं.
नए ऑपरेशन
NNAPI 1.3 में एक नया ऑपरेंड टाइप, TENSOR_QUANT8_ASYMM_SIGNED
जोड़ा गया है. इससे TensorFlow Lite के नए क्वांटिज़ेशन स्कीम के साथ काम करने में मदद मिलती है.
इसके अलावा, NNAPI 1.3 में ये नए ऑपरेशन जोड़े गए हैं:
QUANTIZED_LSTM
IF
WHILE
ELU
HARD_SWISH
FILL
RANK
नए एमएल कंट्रोल
NNAPI 1.3 में नए कंट्रोल जोड़े गए हैं, ताकि मशीन लर्निंग आसानी से काम कर सके:
QoS API: क्वालिटी ऑफ़ सर्विस (QoS) एपीआई के नए वर्शन में, NNAPI में प्राथमिकता तय करने और टास्क की समयसीमा सेट करने की सुविधा शामिल है. इसके लिए, ये नए फ़ंक्शन इस्तेमाल किए जाते हैं:
मेमोरी डोमेन इनपुट/आउटपुट: NNAPI 1.3 में, मेमोरी डोमेन को इनपुट और आउटपुट के तौर पर इस्तेमाल करने की सुविधा शामिल है. इससे, सिस्टम के अलग-अलग कॉम्पोनेंट में एक ही डेटा की ग़ैर-ज़रूरी कॉपी हट जाती हैं. इससे, Android के न्यूरल नेटवर्क की रनटाइम परफ़ॉर्मेंस बेहतर होती है. यह सुविधा
ANeuralNetworksMemoryDesc
औरANeuralNetworkMemory
ऑब्जेक्ट के साथ इस्तेमाल करने के लिए, नए एनडीके एपीआई का एक सेट जोड़ती है. इसमें ये फ़ंक्शन शामिल हैं:ANeuralNetworksMemoryDesc_create()
ANeuralNetworksMemoryDesc_free()
ANeuralNetworksMemoryDesc_addInputRole()
ANeuralNetworksMemoryDesc_addOutputRole()
ANeuralNetworksMemoryDesc_setDimensions()
ANeuralNetworksMemoryDesc_finish()
ANeuralNetworksMemory_createFromDesc()
ANeuralNetworksMemory_copy()
ज़्यादा जानने के लिए, न्यूरल नेटवर्क मेमोरी डोमेन का सैंपल देखें.
डिपेंडेंसी एपीआई और सिंक फ़ेंस की सुविधा: NNAPI 1.3 में डिपेंडेंसी के साथ एसिंक्रोनस कंप्यूट काम करता है. इससे छोटे चेन मॉडल शुरू करते समय ओवरहेड काफ़ी कम हो जाता है. इस सुविधा में ये नए फ़ंक्शन जोड़े गए हैं:
कंट्रोल फ़्लो: NNAPI 1.3 में नई ग्राफ़ कार्रवाइयां
ANEURALNETWORKS_IF
औरANEURALNETWORKS_WHILE
के साथ सामान्य कंट्रोल फ़्लो के लिए सहायता मिलती है, जो नएANEURALNETWORKS_MODEL
ऑपरेंड टाइप का इस्तेमाल करके अन्य मॉडल को आर्ग्युमेंट के तौर पर स्वीकार करते हैं. इसके अलावा, इस सुविधा में ये नए फ़ंक्शन जोड़े गए हैं:
NDK Thermal API
जब डिवाइस बहुत गर्म हो जाते हैं, तो वे सीपीयू और/या जीपीयू को रोक सकते हैं. इससे ऐप्लिकेशन पर गलत तरीके से असर पड़ सकता है. जिन ऐप्लिकेशन या गेम में जटिल ग्राफ़िक, ज़्यादा कंप्यूटेशन या लगातार नेटवर्क गतिविधि शामिल होती है उनमें समस्याएं आने की संभावना ज़्यादा होती है.
डिवाइस के तापमान में होने वाले बदलावों को मॉनिटर करने के लिए, Android 11 में NDK Thermal API का इस्तेमाल करें. इसके बाद, डिवाइस के तापमान को कम रखने और बैटरी के कम इस्तेमाल को बनाए रखने के लिए कार्रवाई करें. यह एपीआई, Java Thermal API से मिलता-जुलता है. इसका इस्तेमाल, थर्मल स्टेटस में होने वाले किसी भी बदलाव की सूचनाएं पाने या सीधे तौर पर मौजूदा स्टेटस को पोल करने के लिए किया जा सकता है.
टेक्स्ट और इनपुट
बेहतर IME ट्रांज़िशन
Android 11 में नए एपीआई जोड़े गए हैं. इनकी मदद से, इनपुट मेथड एडिटर (आईएमई) के ट्रांज़िशन को बेहतर बनाया जा सकता है. जैसे, स्क्रीन पर दिखने वाले कीबोर्ड. इन एपीआई की मदद से, अपने ऐप्लिकेशन के कॉन्टेंट को आसानी से अडजस्ट किया जा सकता है. ऐसा, IME के दिखने और न दिखने के साथ-साथ, स्टेटस और नेविगेशन बार जैसे अन्य एलिमेंट के साथ सिंक करके किया जा सकता है.
जब किसी EditText
पर फ़ोकस हो, तब IME दिखाने के लिए,
view.getInsetsController().show(Type.ime())
को कॉल करें.
(इस तरीके को किसी भी व्यू पर उसी क्रम में कॉल किया जा सकता है जिस क्रम में फ़ोकस EditText
किया गया है. आपको इसे खास तौर पर EditText
पर कॉल करने की ज़रूरत नहीं है.) IME को छिपाने के लिए, view.getInsetsController().hide(Type.ime())
पर कॉल करें.
view.getRootWindowInsets().isVisible(Type.ime())
को कॉल करके, यह देखा जा सकता है कि फ़िलहाल कोई IME दिख रहा है या नहीं.
अपने ऐप्लिकेशन के व्यू को IME के दिखने और न दिखने के साथ सिंक करने के लिए, किसी व्यू पर एक लिसनर सेट करें. इसके लिए, View.setWindowInsetsAnimationCallback()
को WindowInsetsAnimation.Callback
दें.
(इस लिसनर को किसी भी व्यू पर सेट किया जा सकता है, इसके लिए EditText
होना ज़रूरी नहीं है.)
IME आपके सुनने वाले के चुने गए onPrepare()
तरीके का इस्तेमाल करता है. इसके बाद, ट्रांज़िशन की शुरुआत में onStart()
को कॉल करता है. इसके बाद, यह ट्रांज़िशन के हर चरण में onProgress()
को कॉल करता है. ट्रांज़िशन पूरा होने के बाद, IME onEnd()
को कॉल करता है.
ट्रांज़िशन के किसी भी समय, WindowInsetsAnimation.getFraction()
को कॉल करके यह पता लगाया जा सकता है कि ट्रांज़िशन कितनी प्रोग्रेस कर चुका है.
इन एपीआई का इस्तेमाल करने का उदाहरण देखने के लिए, नया WindowInsetsAnimation कोड सैंपल देखें.
IME ऐनिमेशन को कंट्रोल करना
आपके पास IME ऐनिमेशन या नेविगेशन बार जैसे किसी दूसरे सिस्टम बार के ऐनिमेशन को कंट्रोल करने का विकल्प भी होता है. ऐसा करने के लिए, सबसे पहले विंडो इनसेट में होने वाले बदलावों के लिए, नया लिसनर सेट करने के लिए setOnApplyWindowInsetsListener()
को कॉल करें:
Kotlin
rootView.setOnApplyWindowInsetsListener { rootView, windowInsets -> val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime()) rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom) // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. WindowInsets.CONSUMED }
Java
mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime()); mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom); // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. return WindowInsets.CONSUMED; } });
IME या अन्य सिस्टम बार को एक जगह से दूसरी जगह ले जाने के लिए, कंट्रोलर के controlWindowInsetsAnimation()
तरीके को चुनें:
Kotlin
view.windowInsetsController.controlWindowInsetsAnimation( Type.ime(), 1000, LinearInterpolator(), cancellationSignal, object : WindowInsetsAnimationControlListener() { fun onReady(controller: WindowInsetsAnimationController, types: Int) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */) } } );
Java
mRoot.getWindowInsetsController().controlWindowInsetsAnimation( Type.ime(), 1000, new LinearInterpolator(), cancellationSignal, new WindowInsetsAnimationControlListener() { @Override public void onReady( @NonNull WindowInsetsAnimationController controller, int types ) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */); } @Override public void onCancelled() {} });
ICU लाइब्रेरी से जुड़े अपडेट
Android 11, android.icu
पैकेज को अपडेट करता है, ताकि ICU लाइब्रेरी के 66 वर्शन का इस्तेमाल किया जा सके. Android 10 में, ICU लाइब्रेरी का 63 वर्शन इस्तेमाल किया जाता है. लाइब्रेरी के नए वर्शन में, अपडेट किया गया CLDR लोकेल डेटा और Android में डेटा को अंतरराष्ट्रीय स्तर पर उपलब्ध कराने की सुविधा से जुड़े कई सुधार शामिल हैं.
लाइब्रेरी के नए वर्शन में ये बदलाव किए गए हैं:
- फ़ॉर्मैटिंग करने वाले कई एपीआई, अब
FormattedValue
को बढ़ाने वाले नए रिटर्न ऑब्जेक्ट टाइप के साथ काम करते हैं. LocaleMatcher
एपीआई को बिल्डर क्लास,java.util.Locale
टाइप के साथ काम करने की सुविधा, और नतीजे की क्लास के साथ बेहतर बनाया गया है. इस क्लास में, मैच के बारे में ज़्यादा डेटा होता है.- यूनिकोड 13 अब काम करता है.
मीडिया
MediaCodec बफ़र को असाइन करना
Android 11 में एक नया MediaCodec
API शामिल है. इससे, इनपुट और आउटपुट बफ़र को असाइन करते समय, ऐप्लिकेशन को ज़्यादा कंट्रोल मिलता है. इससे आपके ऐप्लिकेशन को ज़्यादा बेहतर तरीके से मेमोरी मैनेज करने में मदद मिलती है.
नई क्लास:
नए तरीके:
MediaCodec.getQueueRequest()
MediaCodec.getOutputFrame()
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
इसके अलावा, MediaCodec.Callback()
में दो तरीकों के व्यवहार में बदलाव हुआ है:
onInputBufferAvailable()
- अगर BlockModel API का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है, तो ऐप्लिकेशन को इंडेक्स के साथ
MediaCodec.getInputBuffer()
औरMediaCodec.queueInputBuffer()
को कॉल करने के बजाय, इंडेक्स के साथMediaCodec.getQueueRequest
का इस्तेमाल करना चाहिए. साथ ही, स्लॉट में LinearBlock/HardwareBuffer को अटैच करना चाहिए. onOutputBufferAvailable()
- ऐप्लिकेशन, इंडेक्स के साथ
MediaCodec.getOutputBuffer()
को कॉल करने के बजाय, ज़्यादा जानकारी और LinearBlock/HardwareBuffer बफ़र वालेOutputFrame
ऑब्जेक्ट को पाने के लिए, इंडेक्स के साथMediaCodec.getOutputFrame()
का इस्तेमाल कर सकते हैं.
MediaCodec में लो-लेटेंसी डिकोडिंग
Android 11 में, गेम और रीयल-टाइम ऐप्लिकेशन के लिए, कम इंतज़ार के साथ डिकोड करने की सुविधा को बेहतर बनाने के लिए MediaCodec
को बेहतर बनाया गया है. FEATURE_LowLatency
को MediaCodecInfo.CodecCapabilities.isFeatureSupported()
में पास करके, यह जांच की जा सकती है कि कोई कोडेक, कम इंतज़ार वाली डिकोडिंग की सुविधा देता है या नहीं.
'वीडियो स्ट्रीम होने और उसके दिखने के समय का अंतर कम करें' सुविधा को चालू या बंद करने के लिए, इनमें से कोई एक तरीका अपनाएं:
MediaCodec.configure()
का इस्तेमाल करके, नई बटनKEY_LOW_LATENCY
को 0 या 1 पर सेट करें.MediaCodec.setParameters()
का इस्तेमाल करके, नई पैरामीटर कुंजीPARAMETER_KEY_LOW_LATENCY
को 0 या 1 पर सेट करें.
AAudio का नया फ़ंक्शन AAudioStream_release()
यह फ़ंक्शन AAudioStream_close()
एक ही समय पर ऑडियो स्ट्रीम को रिलीज़ और बंद करता है. ऐसा करना खतरनाक हो सकता है. अगर स्ट्रीम बंद होने के बाद, कोई दूसरी प्रोसेस उसे ऐक्सेस करने की कोशिश करती है, तो प्रोसेस क्रैश हो जाएगी.
नया फ़ंक्शन
AAudioStream_release()
स्ट्रीम को रिलीज़ करता है, लेकिन उसे बंद नहीं करता. इससे स्ट्रीम के रिसॉर्स खाली हो जाते हैं और स्ट्रीम को पहले जैसा कर दिया जाता है. ऑब्जेक्ट तब तक बना रहता है, जब तक आप AAudioStream_close()
को कॉल नहीं करते.
MediaParser API
MediaParser मीडिया एक्सट्रैक्ट करने के लिए एक नया लो लेवल एपीआई है. यह MediaExtractor के मुकाबले ज़्यादा सुविधाजनक है. साथ ही, यह मीडिया एक्सट्रैक्ट करने के फ़ंक्शन पर ज़्यादा कंट्रोल देता है.
यूएसबी डिवाइस से ऑडियो कैप्चर करना
जब कोई ऐप्लिकेशन, ऑडियो रिकॉर्ड करने की सुविधा वाले यूएसबी डिवाइस (जैसे, यूएसबी हेडसेट) को सीधे ऐक्सेस करने का अनुरोध करने के लिए, RECORD_AUDIO
की अनुमति के बिना UsbManager
का इस्तेमाल करता है, तो उपयोगकर्ता को चेतावनी वाला एक नया मैसेज दिखता है. इसमें उपयोगकर्ता से डिवाइस का इस्तेमाल करने की अनुमति की पुष्टि करने के लिए कहा जाता है. सिस्टम, “हमेशा इस्तेमाल करें” विकल्प को अनदेखा करता है. इसलिए, जब भी कोई ऐप्लिकेशन ऐक्सेस का अनुरोध करता है, तो उपयोगकर्ता को चेतावनी स्वीकार करनी होगी और अनुमति देनी होगी.
इस तरह के व्यवहार से बचने के लिए, आपके ऐप्लिकेशन को RECORD_AUDIO
की अनुमति का अनुरोध करना चाहिए.
एक साथ कई लोगों के लिए माइक का ऐक्सेस
Android 11 में AudioRecord
, MediaRecorder
, और
AAudioStream
एपीआई के लिए नए तरीके जोड़े गए हैं. ये तरीके, इस्तेमाल के उदाहरण के बावजूद, एक साथ कैप्चर करने की सुविधा को चालू और बंद करते हैं. ऑडियो इनपुट शेयर करना देखें.
आउटपुट स्विचर
Android 11, उन ऐप्लिकेशन के लिए नया तरीका लागू करता है जो 'कास्ट' और mediarouter एपीआई का इस्तेमाल करते हैं.
किसी ऐप्लिकेशन में जाकर कास्ट करने के विकल्पों को ऐक्सेस करने के अलावा, डिवाइस के मीडिया प्लेयर में भी स्क्रीन स्विच करने के विकल्प दिखते हैं. इससे उपयोगकर्ता को एक डिवाइस से दूसरे डिवाइस पर स्विच करने में आसानी होती है. ऐसा इसलिए, क्योंकि वीडियो देखने और ऑडियो सुनने के लिए, वे अलग-अलग डिवाइसों का इस्तेमाल करते हैं. जैसे, कि वीडियो को किचन में देखने के बजाय फ़ोन पर देखना या घर या कार में ऑडियो सुनना. आउटपुट स्विचर देखें.
कनेक्टिविटी
वाई-फ़ाई पासपॉइंट की सुविधाओं को बेहतर बनाना
Android 11 में जोड़ी गई पासपॉइंट की सुविधाओं के बारे में जानने के लिए, पासपॉइंट देखें.
वाई-फ़ाई सुझाव देने वाले एपीआई को बड़ा किया गया
Android 11, आपके ऐप्लिकेशन की नेटवर्क मैनेजमेंट क्षमताओं को बढ़ाने के लिए, वाई-फ़ाई सुझाव एपीआई को बड़ा करता है. इनमें ये सुविधाएं शामिल हैं:
- कनेक्टिविटी मैनेजमेंट ऐप्लिकेशन, डिसकनेक्ट करने के अनुरोधों की अनुमति देकर, अपने नेटवर्क मैनेज कर सकते हैं.
- पासपॉइंट नेटवर्क, Feedback API के साथ इंटिग्रेट किए जाते हैं और लोगों को सुझाए जा सकते हैं.
- Analytics API की मदद से, अपने नेटवर्क की क्वालिटी के बारे में जानकारी पाई जा सकती है.
CallScreeningService से जुड़े अपडेट
Android 11 से, CallScreeningService, आने वाले कॉल के लिए STIR/SHAKEN की पुष्टि की स्थिति (verstat) के बारे में जानकारी का अनुरोध कर सकती है. यह जानकारी, आने वाले कॉल के लिए कॉल की जानकारी के हिस्से के तौर पर दी जाती है.
अगर CallScreeningService
के पास READ_CONTACTS
की अनुमति है, तो उपयोगकर्ता की संपर्क सूची में मौजूद किसी नंबर से इनकमिंग कॉल या आउटगोइंग कॉल होने पर, ऐप्लिकेशन को इसकी सूचना दी जाती है.
ज़्यादा जानकारी के लिए, कॉल करने वाले के आईडी को बदलने से रोकना लेख पढ़ें.
Mobile API के अपडेट खोलें
Android 11 और उसके बाद के वर्शन पर OMAPI के साथ काम करने के बारे में जानकारी के लिए, Open Mobile API के साथ काम करने वाले रीडर लेख पढ़ें.
बेहतर परफ़ॉर्म करने वाले वीपीएन
एपीआई लेवल 30 और उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन या एपीआई लेवल 29 और उसके बाद के वर्शन पर लॉन्च किए गए डिवाइसों पर काम करने वाले ऐप्लिकेशन, उपयोगकर्ता के कॉन्फ़िगर किए गए और ऐप्लिकेशन पर आधारित, दोनों तरह के वीपीएन के लिए IKEv2/IPsec लागू कर सकते हैं.
वीपीएन, ऑपरेटिंग सिस्टम पर काम करते हैं. इसलिए, किसी ऐप्लिकेशन में IKEv2/मेरा सिस्टम वीपीएन कनेक्शन बनाने के लिए, ज़रूरी कोड को समझना आसान हो जाता है.
नेटवर्क ऐक्सेस कंट्रोल हर प्रोसेस के हिसाब से
हर प्रोसेस के हिसाब से नेटवर्क ऐक्सेस चालू करने के बारे में जानने के लिए, नेटवर्क के इस्तेमाल को मैनेज करना लेख पढ़ें.
एक ही FQDN के साथ, इंस्टॉल किए गए एक से ज़्यादा पासपॉइंट कॉन्फ़िगरेशन को अनुमति दें
Android 11 से, PasspointConfiguration
ऑब्जेक्ट के लिए यूनीक आइडेंटिफ़ायर पाने के लिए, PasspointConfiguration.getUniqueId()
का इस्तेमाल किया जा सकता है. इससे आपके ऐप्लिकेशन के उपयोगकर्ता, एक ही पूरी तरह-क्वालिफ़ाइड डोमेन नेम (एफ़क्यूडीएन) वाली कई प्रोफ़ाइलें इंस्टॉल कर पाएंगे.
यह सुविधा तब मददगार होती है, जब कोई मोबाइल और इंटरनेट सेवा देने वाली कंपनी अपने नेटवर्क पर, मोबाइल देश कोड (एमसीसी) और मोबाइल नेटवर्क कोड (एमएनसी) के एक से ज़्यादा कॉम्बिनेशन डिप्लॉय करती है, लेकिन उसके पास सिर्फ़ एक एफ़क्यूडीएन होता है. Android 11 और उसके बाद के वर्शन पर, एक ही एफ़क्यूडीएन से एक से ज़्यादा प्रोफ़ाइलें इंस्टॉल की जा सकती हैं. अगर उपयोगकर्ता एमसीसी या MNC में से कोई सिम इंस्टॉल करता है, तो एक ही FQDN का इस्तेमाल करके, नेटवर्क और होम नेटवर्क की सेवा देने वाली कंपनी आपस में मेल खाएगी.
जीएनएसएस ऐंटीना के साथ काम करना
Android 11 में GnssAntennaInfo
क्लास को शामिल किया गया है. इससे आपके ऐप्लिकेशन के लिए, सेंटीमीटर तक सटीक जगह की जानकारी देने वाली सुविधा का ज़्यादा इस्तेमाल करना संभव हो जाता है. यह सुविधा, ग्लोबल नेविगेशन सैटलाइट सिस्टम (GNSS) से मिलती है.
ऐंटेना कैलिब्रेशन की जानकारी वाली गाइड में ज़्यादा जानें.
ग्राफ़िक्स
NDK इमेज डिकोडर
NDK ImageDecoder
API, Android C/C++ ऐप्लिकेशन के लिए स्टैंडर्ड एपीआई उपलब्ध कराता है. इसकी मदद से, इमेज को सीधे डिकोड किया जा सकता है. ऐप्लिकेशन डेवलपर को अब JNI के ज़रिए फ़्रेमवर्क एपीआई का इस्तेमाल करने या तीसरे पक्ष की इमेज डिकोड करने वाली लाइब्रेरी को बंडल करने की ज़रूरत नहीं है. ज़्यादा जानकारी के लिए, इमेज डिकोडर डेवलपर गाइड देखें.
फ़्रेम रेट एपीआई
Android 11 एक ऐसा एपीआई उपलब्ध कराता है जिसकी मदद से ऐप्लिकेशन, सिस्टम को सही फ़्रेम रेट के बारे में जानकारी दे पाते हैं. इससे, एक से ज़्यादा रीफ़्रेश रेट के साथ काम करने वाले डिवाइसों को इस्तेमाल करने में परेशानी नहीं होती. इस एपीआई को इस्तेमाल करने के तरीके के बारे में जानने के लिए, फ़्रेम रेट की गाइड देखें.
कम इंतज़ार वाले वर्शन के लिए अनुरोध करना और उसकी जांच करना
कुछ डिसप्ले, ग्राफ़िक पोस्ट-प्रोसेसिंग कर सकते हैं. जैसे, कुछ बाहरी डिसप्ले और टीवी. यह पोस्ट-प्रोसेस ग्राफ़िक को बेहतर बनाता है, लेकिन इससे इंतज़ार का समय बढ़ सकता है. एचडीएमआई 2.1 के साथ काम करने वाले नए डिसप्ले में, अपने-आप इंतज़ार का समय कम करने वाला मोड होता है. ALLM को गेम मोड भी कहा जाता है. यह इस पोस्ट-प्रोसेसिंग को बंद करके, इंतज़ार के समय को कम करता है. एएलएलएम के बारे में ज़्यादा जानकारी के लिए, एचडीएमआई 2.1 स्पेसिफ़िकेशन देखें.
अगर लो-लेटेंसी मोड उपलब्ध है, तो विंडो इस मोड का इस्तेमाल करने का अनुरोध कर सकती है. ALLM खास तौर पर गेम और वीडियो कॉन्फ़्रेंसिंग जैसे ऐप्लिकेशन के लिए फ़ायदेमंद है, जहां सबसे अच्छे ग्राफ़िक के मुकाबले इंतज़ार का समय कम होना ज़्यादा ज़रूरी है.
कम से कम पोस्ट-प्रोसेसिंग को चालू या बंद करने के लिए, Window.setPreferMinimalPostProcessing()
को कॉल करें या विंडो के preferMinimalPostProcessing
एट्रिब्यूट को true
पर सेट करें. सभी डिसप्ले पर, कम पोस्ट-प्रोसेसिंग की सुविधा काम नहीं करती. यह पता करने के लिए कि कोई डिसप्ले इस सुविधा के साथ काम करता है या नहीं, नए तरीके Display.isMinimalPostProcessingSupported()
को कॉल करें.
परफ़ॉर्म करने वाले ग्राफ़िक डीबग लेयर इंजेक्शन
ऐप्लिकेशन अब नेटिव ऐप्लिकेशन कोड में बाहरी ग्राफ़िक लेयर (GLES, Vulkan) लोड कर सकते हैं, ताकि वे डीबग किए जा सकने वाले ऐप्लिकेशन की तरह ही फ़ंक्शन को दिखा सकें. हालांकि, ऐसा करने पर परफ़ॉर्मेंस पर असर नहीं पड़ेगा. यह सुविधा खास तौर पर तब अहम होती है, जब GAPID जैसे टूल की मदद से आपके ऐप्लिकेशन की प्रोफ़ाइल बनाई जाती है. अपने ऐप्लिकेशन की प्रोफ़ाइल बनाने के लिए, ऐप्लिकेशन को डीबग करने के बजाय, अपनी ऐप्लिकेशन मेनिफ़ेस्ट फ़ाइल में यह मेटा-डेटा एलिमेंट शामिल करें:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
इमेज और कैमरा
ऐक्टिव कैप्चर के दौरान, सूचनाओं की आवाज़ और वाइब्रेशन को म्यूट करें
Android 11 से, कैमरे का इस्तेमाल करने के दौरान, आपका ऐप्लिकेशन setCameraAudioRestriction()
का इस्तेमाल करके, सिर्फ़ वाइब्रेशन को म्यूट कर सकता है. इसके अलावा, ऐप्लिकेशन आवाज़ और वाइब्रेशन, दोनों को म्यूट कर सकता है या फिर दोनों को म्यूट नहीं कर सकता.
Android एम्युलेटर में कैमरे के लिए ज़्यादा सहायता
Android 11 के बाद, एम्युलेटर में कैमरों के लिए उपलब्ध सहायता के बारे में जानने के लिए, कैमरे के लिए सहायता लेख पढ़ें.
एक साथ कई कैमरे इस्तेमाल करने की सुविधा
Android 11, एक बार में एक से ज़्यादा कैमरे के इस्तेमाल से जुड़ी क्वेरी के लिए एपीआई जोड़ता है. इसमें सामने और पीछे, दोनों कैमरे शामिल हैं.
आपका ऐप्लिकेशन जिस डिवाइस पर चल रहा है उस पर सहायता पाने के लिए, ये तरीके अपनाएं:
getConcurrentCameraIds()
ऐसे कैमरा आईडी के कॉम्बिनेशन काSet
दिखाता है जो एक ही ऐप्लिकेशन प्रोसेस से कॉन्फ़िगर किए जाने पर, एक साथ स्ट्रीम किए जा सकते हैं.isConcurrentSessionConfigurationSupported()
यह क्वेरी करता है कि कैमरा डिवाइस, एक साथ उस सेशन के कॉन्फ़िगरेशन के साथ काम कर सकते हैं या नहीं.
कई फ़्रेम वाली HEIF इमेज के लिए बेहतर तरीके से काम करने की सुविधा
Android 11 से, ImageDecoder.decodeDrawable()
को कॉल करने और फ़्रेम के क्रम वाली HEIF इमेज (जैसे, ऐनिमेशन या बर्स्ट फ़ोटो) पास करने पर, यह तरीका AnimatedImageDrawable
दिखाता है. इसमें इमेज का पूरा क्रम होता है. Android के पुराने वर्शन में, इस तरीके से सिर्फ़ एक फ़्रेम का BitmapDrawable
मिलता था.
अगर HEIF ग्राफ़िक में कई फ़्रेम हैं, जो क्रम में नहीं हैं, तो MediaMetadataRetriever.getImageAtIndex()
को कॉल करके अलग-अलग फ़्रेम वापस पाया जा सकता है.
सुलभता
सुलभता सेवा के डेवलपर के लिए अपडेट
अगर आपने सुलभता से जुड़ी अपनी पसंद के मुताबिक कोई सेवा बनाई है, तो Android 11 में इन सुविधाओं का इस्तेमाल किया जा सकता है:
- सुलभता सेवा के बारे में उपयोगकर्ताओं को दी जाने वाली जानकारी में, अब सादे टेक्स्ट के साथ-साथ एचटीएमएल और इमेज का इस्तेमाल किया जा सकता है. इस सुविधा की मदद से, असली उपयोगकर्ताओं को यह बताना आसान हो जाता है कि आपकी सेवा क्या करती है और इससे उन्हें कैसे मदद मिल सकती है.
- यूज़र इंटरफ़ेस (यूआई) एलिमेंट की स्थिति की जानकारी के साथ काम करने के लिए,
getStateDescription()
तरीके को कॉल करें. यह तरीकाcontentDescription
से ज़्यादा अहम है. - टच इवेंट को सिस्टम के टच एक्सप्लोरर को बायपास करने का अनुरोध करने के लिए,
setTouchExplorationPassthroughRegion()
को कॉल करें. इसी तरह, जेस्चर से सिस्टम के जेस्चर डिटेक्टर को बायपास करने का अनुरोध करने के लिए,setGestureDetectionPassthroughRegion()
को कॉल करें. - आपके पास "enter" और "next" जैसी IME कार्रवाइयों का अनुरोध करने के साथ-साथ, उन विंडो के स्क्रीनशॉट का अनुरोध करने का विकल्प होता है जिनमें
FLAG_SECURE
फ़्लैग चालू नहीं होता.
कुछ और सुविधाएं
ऐप्लिकेशन प्रोसेस से बाहर निकलने की वजहें
Android 11 में, ActivityManager.getHistoricalProcessExitReasons()
तरीका जोड़ा गया है. इससे, हाल ही में किसी भी प्रोसेस के बंद होने की वजहों की जानकारी मिलती है. ऐप्लिकेशन, क्रैश की गड़बड़ी की जानकारी इकट्ठा करने के लिए इस तरीके का इस्तेमाल कर सकते हैं. जैसे, कोई प्रोसेस ANR, मेमोरी से जुड़ी समस्याओं या अन्य वजहों से खत्म हुई है या नहीं.
इसके अलावा, बाद में विश्लेषण के लिए कस्टम स्टेटस की जानकारी सेव करने के लिए, नए setProcessStateSummary()
तरीके का इस्तेमाल किया जा सकता है.
getHistoricalProcessExitReasons()
तरीका, ApplicationExitInfo
क्लास के इंस्टेंस दिखाता है. इनमें ऐप्लिकेशन की प्रोसेस के बंद होने से जुड़ी जानकारी होती है. इस क्लास के किसी इंस्टेंस पर getReason()
को कॉल करके, यह पता लगाया जा सकता है कि आपके ऐप्लिकेशन की प्रोसेस को क्यों बंद किया गया. उदाहरण के लिए, REASON_CRASH
की रिटर्न वैल्यू से पता चलता है कि आपके ऐप्लिकेशन में कोई ऐसा अपवाद हुआ है जिसे मैनेज नहीं किया जा सका. अगर आपके ऐप्लिकेशन को यह पक्का करना है कि बाहर निकलने के इवेंट यूनीक हों, तो वह ऐप्लिकेशन के हिसाब से आइडेंटिफ़ायर बनाए रख सकता है. जैसे, getTimestamp()
वाले तरीके से मिले टाइमस्टैंप के आधार पर हैश वैल्यू.
अन्य संसाधन
ज़्यादा जानकारी के लिए, Medium पर Android 11 के नए टूल के बारे में लेख पढ़ें. इन टूल की मदद से, ऐप्लिकेशन को ज़्यादा निजी और स्थिर बनाया जा सकता है.
रिसॉर्स लोडर
Android 11 में एक नया एपीआई जोड़ा गया है. इससे ऐप्लिकेशन, संसाधनों को खोजने और लोड करने के तरीकों को डाइनैमिक
इस्तेमाल कर सकते हैं. नई सुविधाएं देने के लिए, एपीआई की नई क्लास ResourcesLoader
और ResourcesProvider
मुख्य तौर पर ज़िम्मेदार हैं. इन दोनों का इस्तेमाल करके, ज़्यादा संसाधन और ऐसेट उपलब्ध कराई जा सकती हैं. साथ ही, मौजूदा संसाधनों और ऐसेट की वैल्यू में बदलाव किया जा सकता है.
ResourcesLoader
ऑब्जेक्ट, ऐसे कंटेनर होते हैं जो किसी ऐप्लिकेशन के Resources
इंस्टेंस को ResourcesProvider
ऑब्जेक्ट की आपूर्ति करते हैं. इसके बजाय, ResourcesProvider
ऑब्जेक्ट, APK और संसाधन टेबल से संसाधन डेटा लोड करने के तरीके उपलब्ध कराते हैं.
इस एपीआई का मुख्य इस्तेमाल एक उदाहरण है, कस्टम ऐसेट लोड करना. loadFromDirectory()
का इस्तेमाल करके, ResourcesProvider
बनाया जा सकता है. यह फ़ाइल-आधारित संसाधनों और एसेट के रिज़ॉल्यूशन को रीडायरेक्ट करता है. इससे, यह ऐप्लिकेशन के APK के बजाय किसी खास डायरेक्ट्री को खोजता है. इन ऐसेट को AssetManager
एपीआई क्लास से open()
तरीकों के फ़ैमिली ग्रुप की मदद से ऐक्सेस किया जा सकता है. यह बिलकुल वैसे ही है जैसे APK में बंडल की गई ऐसेट के साथ होता है.
APK सिग्नेचर स्कीम v4
Android 11 में, APK सिग्नेचर स्कीम v4 के साथ काम करने की सुविधा जोड़ी गई है. इस स्कीम से, किसी अलग फ़ाइल (apk-name.apk.idsig
) में नए तरह के हस्ताक्षर बनाए जाते हैं. हालांकि, ये v2 और v3 की तरह होते हैं. APK में कोई बदलाव नहीं किया जाता. इस स्कीम में, ADB की मदद से APK को इंस्टॉल करने की सुविधा काम करती है. इससे APK इंस्टॉल करने में कम समय लगता है.
डाइनैमिक इंटेंट फ़िल्टर
इंटेंट पाने के लिए, ऐप्लिकेशन को कंपाइल करने के समय यह बताना होगा कि वह किस तरह का डेटा पा सकता है. इसके लिए, ऐप्लिकेशन के मेनिफ़ेस्ट में इंटेंट फ़िल्टर तय करना होगा. Android 10 और उससे पहले के वर्शन में, ऐप्लिकेशन के पास रनटाइम के दौरान अपने इंटेंट फ़िल्टर बदलने का कोई तरीका नहीं होता. यह वर्चुअलाइज़ेशन ऐप्लिकेशन (जैसे, वर्चुअल मशीन और रिमोट डेस्कटॉप) के लिए एक समस्या है, क्योंकि इनमें यह पता नहीं लगाया जा सकता कि उपयोगकर्ता इनमें कौनसा सॉफ़्टवेयर इंस्टॉल करेगा.
Android 11 में MIME ग्रुप की सुविधा जोड़ी गई है. यह मेनिफ़ेस्ट का एक नया एलिमेंट है. इसकी मदद से, ऐप्लिकेशन किसी इंटेंट फ़िल्टर में MIME टाइप का डाइनैमिक सेट तय कर सकता है और रनटाइम के दौरान प्रोग्राम के हिसाब से उसमें बदलाव कर सकता है. MIME ग्रुप का इस्तेमाल करने के लिए, अपने ऐप्लिकेशन मेनिफ़ेस्ट में नया android:mimeGroup
एट्रिब्यूट वाला डेटा एलिमेंट शामिल करें:
<intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeGroup="myMimeGroup"/> </intent-filter>
android:mimeGroup
एट्रिब्यूट की वैल्यू एक आर्बिट्ररी स्ट्रिंग आईडी है, जो रनटाइम के दौरान MIME ग्रुप की पहचान करता है. PackageManager
एपीआई क्लास में दिए गए इन नए तरीकों में, MIME ग्रुप का आईडी डालकर, उसके कॉन्टेंट को ऐक्सेस और अपडेट किया जा सकता है:
जब किसी MIME ग्रुप में प्रोग्राम के हिसाब से MIME टाइप जोड़ा जाता है, तो वह ठीक ठीक वैसे ही काम करता है जैसा मेनिफ़ेस्ट में स्टैटिक MIME टाइप के बारे में बताया गया है.
अपने-आप जानकारी भरने की सुविधा को बेहतर बनाना
Android 11 में, जानकारी अपने-आप भरने की सुविधा को बेहतर बनाया गया है.
AssistStructure.ViewNode में हिंट आइडेंटिफ़ायर
जानकारी अपने-आप भरने की सेवाओं के लिए, व्यू की प्रॉपर्टी के आधार पर व्यू के लिए हस्ताक्षर हैश का हिसाब लगाना अक्सर फ़ायदेमंद होता है. हस्ताक्षर हैश का हिसाब लगाते समय, व्यू हिंट को शामिल करना एक बेहतरीन प्रॉपर्टी है. हालांकि, हिंट स्ट्रिंग फ़ोन की स्थानीय भाषा के हिसाब से बदल सकती है. इस समस्या को हल करने के लिए, Android 11 में एक नए getHintIdEntry()
तरीके का इस्तेमाल करके, AssistStructure.ViewNode
को बड़ा किया गया है. यह तरीका, व्यू के हिंट टेक्स्ट के लिए रिसॉर्स आइडेंटिफ़ायर दिखाता है. यह तरीका, स्थानीय भाषा पर निर्भर न होने वाली वैल्यू देता है. इसका इस्तेमाल, हस्ताक्षर हैश का हिसाब लगाने के लिए किया जा सकता है.
डेटासेट में दिखाए गए इवेंट
जानकारी अपने-आप भरने की सेवाओं को उनके सुझावों को बेहतर बनाने में मदद करने के लिए, Android 11 में ऐसे मामलों की पहचान करने का तरीका दिया गया है जहां जानकारी अपने-आप भरने की सेवा ने डेटासेट दिखाए, लेकिन उपयोगकर्ता ने उनमें से किसी को भी नहीं चुना. Android 11 में,
FillEventHistory
एक नए TYPE_DATASETS_SHOWN
इवेंट टाइप को रिपोर्ट करता है. जब भी ऑटोमैटिक भरने की सेवा, उपयोगकर्ता को एक या उससे ज़्यादा डेटासेट दिखाती है, तो FillEventHistory
इस तरह का इवेंट लॉग करता है. ऑटोमैटिक भरने की सुविधा देने वाली सेवाएं, इन इवेंट का इस्तेमाल, मौजूदा TYPE_DATASET_SELECTED
इवेंट के साथ कर सकती हैं. इससे यह पता चलता है कि उपयोगकर्ता ने ऑटोमैटिक भरने के लिए दिए गए किसी विकल्प को चुना है या नहीं.
IME इंटिग्रेशन
कीबोर्ड और अन्य IME, अब ऑटोमैटिक भरने के सुझावों को ड्रॉप-डाउन मेन्यू के बजाय, इनलाइन, सुझाव वाली स्ट्रिप या मिलते-जुलते इंटरफ़ेस में दिखा सकते हैं. पासवर्ड और क्रेडिट-कार्ड नंबर जैसी संवेदनशील जानकारी की सुरक्षा के लिए, सुझाव उपयोगकर्ता को दिखाए जाते हैं, लेकिन IME को तब तक नहीं बताया जाता है, जब तक कि उपयोगकर्ता किसी को नहीं चुनता. IME और पासवर्ड मैनेजर, इस सुविधा के साथ कैसे काम कर सकते हैं, इस बारे में जानने के लिए कीबोर्ड के साथ ऑटोमैटिक भरने की सुविधा को इंटिग्रेट करना लेख पढ़ें.
कॉन्टेंट कैप्चर सर्विस के साथ डेटा शेयर करना
Android 11 से, आपका ऐप्लिकेशन डिवाइस की कॉन्टेंट कैप्चर सेवा के साथ डेटा शेयर कर सकता है. इस सुविधा की मदद से, डिवाइस को संदर्भ के हिसाब से जानकारी देना आसान हो जाता है. जैसे, उपयोगकर्ता के आस-पास बज रहे गाने का नाम दिखाना.
अपने ऐप्लिकेशन का डेटा, कॉन्टेंट कैप्चर करने वाली सेवा को उपलब्ध कराने के लिए, ContentCaptureManager
के इंस्टेंस पर shareData()
तरीके को कॉल करें. अगर सिस्टम, डेटा शेयर करने का अनुरोध स्वीकार करता है, तो आपके ऐप्लिकेशन को कॉन्टेंट कैप्चर करने वाली सेवा के साथ शेयर करने के लिए, सिर्फ़ लिखने की अनुमति वाला फ़ाइल डिस्क्रिप्टर मिलता है.