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 में शेयर किए गए डेटा ब्लॉब का इस्तेमाल करके, डिवाइस पर इन बड़े डेटासेट को कैश मेमोरी में सेव करने की सुविधा जोड़ी गई है. डेटासेट शेयर करने के बारे में ज़्यादा जानने के लिए, बड़े डेटासेट शेयर करने के बारे में पूरी जानकारी देखें.
उपयोगकर्ता के क्रेडेंशियल के बिना, ओटीए रीस्टार्ट करने के बाद, फ़ाइल के आधार पर एन्क्रिप्शन करना
डिवाइस पर ओटीए अपडेट पूरा होने और उसे रीस्टार्ट करने के बाद, क्रेडेंशियल से सुरक्षित स्टोरेज में मौजूद क्रेडेंशियल एन्क्रिप्ट की गई कुंजियां (सीई), फ़ाइल-आधारित एन्क्रिप्शन (एफ़बीई) ऑपरेशन के लिए तुरंत उपलब्ध हो जाती हैं. इसका मतलब है कि ओटीए अपडेट के बाद, आपका ऐप्लिकेशन उन कार्रवाइयों को फिर से शुरू कर सकता है जिनके लिए उपयोगकर्ता को अपना पिन, पैटर्न या पासवर्ड डालने से पहले, सीई कुंजियों की ज़रूरत होती है.
परफ़ॉर्मेंस और क्वालिटी
वायरलेस डीबगिंग
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
ऑब्जेक्ट के साथ इस्तेमाल करने के लिए, नए NDK API का एक सेट जुड़ जाता है. इनमें ये फ़ंक्शन शामिल हैं:ANeuralNetworksMemoryDesc_create()
ANeuralNetworksMemoryDesc_free()
ANeuralNetworksMemoryDesc_addInputRole()
ANeuralNetworksMemoryDesc_addOutputRole()
ANeuralNetworksMemoryDesc_setDimensions()
ANeuralNetworksMemoryDesc_finish()
ANeuralNetworksMemory_createFromDesc()
ANeuralNetworksMemory_copy()
ज़्यादा जानने के लिए, न्यूरल नेटवर्क मेमोरी डोमेन का सैंपल देखें.
Dependency API और सिंक फ़ेंस की सुविधा: 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
हो.)
आईएमई, आपके लिसनर के 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 में, Wi-Fi सुझाव एपीआई को बेहतर बनाया गया है. इससे आपके ऐप्लिकेशन के नेटवर्क मैनेजमेंट की सुविधाओं को बेहतर बनाने में मदद मिलेगी. इन सुविधाओं में ये शामिल हैं:
- कनेक्टिविटी मैनेजमेंट ऐप्लिकेशन, डिसकनेक्ट करने के अनुरोधों की अनुमति देकर, अपने नेटवर्क मैनेज कर सकते हैं.
- Passpoint नेटवर्क, सुझाव एपीआई में इंटिग्रेट किए गए हैं और इन्हें उपयोगकर्ता को सुझाया जा सकता है.
- Analytics API की मदद से, अपने नेटवर्क की क्वालिटी के बारे में जानकारी पाई जा सकती है.
CallScreeningService से जुड़े अपडेट
Android 11 से, CallScreeningService, आने वाले कॉल के लिए STIR/SHAKEN की पुष्टि की स्थिति (verstat) के बारे में जानकारी का अनुरोध कर सकती है. यह जानकारी, आने वाले कॉल के लिए कॉल की जानकारी के हिस्से के तौर पर दी जाती है.
अगर किसी CallScreeningService
के पास READ_CONTACTS
अनुमति है, तो उपयोगकर्ता के संपर्क सूची में मौजूद किसी नंबर से आने वाले या उस पर किए जाने वाले कॉल के बारे में ऐप्लिकेशन को सूचना मिलती है.
ज़्यादा जानकारी के लिए, कॉल करने वाले के आईडी को बदलने से रोकना लेख पढ़ें.
Open Mobile API के अपडेट
Android 11 और उसके बाद के वर्शन पर OMAPI के साथ काम करने के बारे में जानकारी पाने के लिए, Open Mobile API के साथ काम करने वाले रीडर लेख पढ़ें.
बेहतर परफ़ॉर्म करने वाले वीपीएन
एपीआई लेवल 30 और उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन या एपीआई लेवल 29 और उसके बाद के वर्शन पर लॉन्च किए गए डिवाइसों पर काम करने वाले ऐप्लिकेशन, उपयोगकर्ता के कॉन्फ़िगर किए गए और ऐप्लिकेशन पर आधारित, दोनों तरह के वीपीएन के लिए IKEv2/IPsec लागू कर सकते हैं.
वीपीएन, ऑपरेटिंग सिस्टम के साथ नेटिव तौर पर काम करते हैं. इससे, किसी ऐप्लिकेशन में IKEv2/IPsec वीपीएन कनेक्शन बनाने के लिए ज़रूरी कोड को आसान बनाना होता है.
हर प्रोसेस के लिए नेटवर्क ऐक्सेस कंट्रोल
हर प्रोसेस के हिसाब से नेटवर्क ऐक्सेस चालू करने के बारे में जानने के लिए, नेटवर्क के इस्तेमाल को मैनेज करना लेख पढ़ें.
एक ही एफ़क्यूडीएन वाले कई इंस्टॉल किए गए Passpoint कॉन्फ़िगरेशन की अनुमति दें
Android 11 से, PasspointConfiguration
ऑब्जेक्ट के लिए यूनीक आइडेंटिफ़ायर पाने के लिए, PasspointConfiguration.getUniqueId()
का इस्तेमाल किया जा सकता है. इससे आपके ऐप्लिकेशन के उपयोगकर्ता, एक ही पूरी तरह-क्वालिफ़ाइड डोमेन नेम (एफ़क्यूडीएन) वाली कई प्रोफ़ाइलें इंस्टॉल कर पाएंगे.
यह सुविधा तब मददगार होती है, जब कोई मोबाइल और इंटरनेट सेवा देने वाली कंपनी अपने नेटवर्क पर, मोबाइल देश कोड (एमसीसी) और मोबाइल नेटवर्क कोड (एमएनसी) के एक से ज़्यादा कॉम्बिनेशन डिप्लॉय करती है, लेकिन उसके पास सिर्फ़ एक एफ़क्यूडीएन होता है. Android 11 और उसके बाद के वर्शन पर, एक ही FQDN वाली एक से ज़्यादा प्रोफ़ाइल इंस्टॉल की जा सकती हैं. जब उपयोगकर्ता एमसीसी या एमएनसी वाला सिम इंस्टॉल करता है, तो ये प्रोफ़ाइलें, होम प्रोवाइडर के नेटवर्क से मैच होंगी.
GNSS ऐंटीना के साथ काम करना
Android 11 में GnssAntennaInfo
क्लास की सुविधा जोड़ी गई है. इससे आपके ऐप्लिकेशन के लिए, सेंटीमीटर तक सटीक जगह की जानकारी देने वाली सुविधा का ज़्यादा इस्तेमाल करना संभव हो जाता है. यह सुविधा, ग्लोबल नेविगेशन सैटलाइट सिस्टम (GNSS) से मिलती है.
ऐंटेना कैलिब्रेशन की जानकारी वाली गाइड में ज़्यादा जानें.
ग्राफ़िक्स
एनडीके (NDK) इमेज डीकोडर
NDK ImageDecoder
एपीआई, Android C/C++ ऐप्लिकेशन के लिए स्टैंडर्ड एपीआई उपलब्ध कराता है, ताकि वे इमेज को सीधे डिकोड कर सकें. ऐप्लिकेशन डेवलपर को अब JNI के ज़रिए फ़्रेमवर्क एपीआई का इस्तेमाल करने या तीसरे पक्ष की इमेज डिकोड करने वाली लाइब्रेरी को बंडल करने की ज़रूरत नहीं है. ज़्यादा जानकारी के लिए, इमेज डिकोडर डेवलपर गाइड देखें.
फ़्रेम रेट एपीआई
Android 11 में एक एपीआई दिया गया है. इसकी मदद से, ऐप्लिकेशन अपने टारगेट किए गए फ़्रेम रेट के बारे में सिस्टम को बता सकते हैं. इससे, एक से ज़्यादा रिफ़्रेश रेट वाले डिवाइसों पर, वीडियो में होने वाले झटके कम हो जाते हैं. इस एपीआई को इस्तेमाल करने के तरीके के बारे में जानने के लिए, फ़्रेम रेट की गाइड देखें.
कम इंतज़ार वाले वर्शन के लिए अनुरोध करना और उसकी जांच करना
कुछ डिसप्ले, ग्राफ़िक पोस्ट-प्रोसेसिंग कर सकते हैं. जैसे, कुछ बाहरी डिसप्ले और टीवी. पोस्ट-प्रोसेसिंग की सुविधा से ग्राफ़िक बेहतर होते हैं. हालांकि, इससे रिस्पॉन्स में देरी हो सकती है. एचडीएमआई 2.1 के साथ काम करने वाले नए डिसप्ले में, अपने-आप कम रिस्पॉन्स टाइम वाला मोड (ALLM, जिसे गेम मोड भी कहा जाता है) होता है. यह पोस्ट-प्रोसेसिंग को बंद करके, रिस्पॉन्स टाइम को कम करता है. ALLM के बारे में ज़्यादा जानकारी के लिए, HDMI 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 में इन सुविधाओं का इस्तेमाल किया जा सकता है:
- सुलभता सेवा के बारे में उपयोगकर्ताओं को दी जाने वाली जानकारी में, अब सादे टेक्स्ट के साथ-साथ एचटीएमएल और इमेज का इस्तेमाल किया जा सकता है. इस सुविधा की मदद से, असली उपयोगकर्ताओं को यह बताना आसान हो जाता है कि आपकी सेवा क्या करती है और इससे उन्हें कैसे मदद मिल सकती है.
contentDescription
के मुकाबले, यूज़र इंटरफ़ेस एलिमेंट की स्थिति के बारे में ज़्यादा जानकारी देने वाले ब्यौरे के साथ काम करने के लिए,getStateDescription()
तरीके को कॉल करें.- टच इवेंट को सिस्टम के टच एक्सप्लोरर को बायपास करने का अनुरोध करने के लिए,
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
बनाया जा सकता है. यह ResourcesProvider
, फ़ाइल-आधारित संसाधनों और एसेट के रिज़ॉल्यूशन को रीडायरेक्ट करता है. इससे, यह ऐप्लिकेशन के APK के बजाय किसी खास डायरेक्ट्री को खोजता है. APK में बंडल की गई ऐसेट की तरह ही, इन ऐसेट को ऐक्सेस करने के लिए, AssetManager
एपीआई क्लास के open()
फ़ैमिली ऑफ़ मेथड का इस्तेमाल किया जा सकता है.
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
एट्रिब्यूट की वैल्यू, एक मनमुताबिक स्ट्रिंग आईडी होती है. यह रनटाइम के दौरान एमआईएम ग्रुप की पहचान करती है. 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 और पासवर्ड मैनेजर, इस सुविधा के साथ कैसे काम कर सकते हैं, इस बारे में जानने के लिए कीबोर्ड के साथ ऑटोमैटिक भरने की सुविधा को इंटिग्रेट करना लेख पढ़ें.
कॉन्टेंट कैप्चर सर्विस के साथ डेटा शेयर करना
Android 11 से, आपका ऐप्लिकेशन डिवाइस की कॉन्टेंट कैप्चर सेवा के साथ डेटा शेयर कर सकता है. इस सुविधा की मदद से, डिवाइस को संदर्भ के हिसाब से जानकारी देना आसान हो जाता है. जैसे, उपयोगकर्ता के आस-पास बज रहे गाने का नाम दिखाना.
अपने ऐप्लिकेशन का डेटा, कॉन्टेंट कैप्चर करने की सेवा के लिए उपलब्ध कराने के लिए, ContentCaptureManager
के किसी इंस्टेंस पर shareData()
तरीका कॉल करें. अगर सिस्टम, डेटा शेयर करने का अनुरोध स्वीकार करता है, तो आपके ऐप्लिकेशन को कॉन्टेंट कैप्चर करने वाली सेवा के साथ शेयर करने के लिए, सिर्फ़ लिखने की अनुमति वाला फ़ाइल डिस्क्रिप्टर मिलता है.