Android 11 में, डेवलपर के लिए कई नई सुविधाएं और एपीआई जोड़े गए हैं. यहां दिए गए सेक्शन से, आपको अपने ऐप्लिकेशन के लिए उपलब्ध सुविधाओं के बारे में जानने और उनसे जुड़े एपीआई का इस्तेमाल शुरू करने में मदद मिलेगी.
नए, बदले गए, और हटाए गए एपीआई की पूरी सूची देखने के लिए, एपीआई में हुए बदलाव की रिपोर्ट पढ़ें. नए एपीआई के बारे में ज़्यादा जानने के लिए, Android API के बारे में जानकारी पर जाएं. नए एपीआई को हाइलाइट किया गया है, ताकि वे आसानी से दिख सकें. इसके अलावा, उन क्षेत्रों के बारे में जानने के लिए जहां प्लैटफ़ॉर्म में हुए बदलावों से आपके ऐप्लिकेशन पर असर पड़ सकता है, Android 11 में हुए बदलावों के बारे में जानकारी देने वाले पेज ज़रूर देखें. ये पेज, Android R को टारगेट करने वाले ऐप्लिकेशन और सभी ऐप्लिकेशन के लिए उपलब्ध हैं. साथ ही, निजता से जुड़े बदलावों के बारे में भी जानें.
नई सुविधाएं
डिवाइस कंट्रोल
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 Biometric लाइब्रेरी में भी दिखते हैं.
पुष्टि करने के तरीके
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 इंस्टॉल किया जाता है. साथ ही, बाकी डेटा को बैकग्राउंड में स्ट्रीम किया जाता है. adb install इस सुविधा का इस्तेमाल अपने-आप करेगा. हालांकि, ऐसा तब होगा, जब डिवाइस पर यह सुविधा काम करती हो और आपने SDK Platform-Tools का नया वर्शन इंस्टॉल किया हो. अगर यह सुविधा काम नहीं करती है, तो इंस्टॉलेशन के डिफ़ॉल्ट तरीके का इस्तेमाल किया जाता है.
इस सुविधा का इस्तेमाल करने के लिए, यहां दिया गया adb कमांड इस्तेमाल करें. अगर डिवाइस पर इंक्रीमेंटल इंस्टॉलेशन की सुविधा काम नहीं करती है, तो कमांड काम नहीं करेगी और इसकी वजह के बारे में जानकारी दिखेगी.
adb install --incremental
ADB की मदद से इंक्रीमेंटल APK इंस्टॉल करने से पहले, आपको अपने APK पर साइन करना होगा. साथ ही, APK सिग्नेचर स्कीम v4 फ़ाइल बनानी होगी. इस सुविधा के काम करने के लिए, v4 सिग्नेचर फ़ाइल को APK के बगल में रखना होगा.
नेटिव मेमोरी ऐलोकेटर का इस्तेमाल करके गड़बड़ी का पता लगाना
GWP-ASan, नेटिव मेमोरी ऐलोकेटर की सुविधा है. इससे, फ़्री की गई मेमोरी को इस्तेमाल करने की गड़बड़ी और हीप-बफ़र-ओवरफ़्लो वाली गड़बड़ियों का पता लगाने में मदद मिलती है. इस सुविधा को ग्लोबल लेवल पर या अपने ऐप्लिकेशन की कुछ खास सबप्रोसेस के लिए चालू किया जा सकता है. ज़्यादा जानने के लिए, GWP-Asan गाइड देखें.
Neural Networks API 1.3
Android 11 में, Neural Networks API (NNAPI) को बेहतर बनाया गया है और इसमें कई नई सुविधाएं जोड़ी गई हैं.
नई कार्रवाइयां
NNAPI 1.3 में एक नया ऑपरेंड टाइप, TENSOR_QUANT8_ASYMM_SIGNED, पेश किया गया है. इसका इस्तेमाल TensorFlow Lite के नए क्वांटाइज़ेशन स्कीम के साथ किया जा सकता है.
इसके अलावा, NNAPI 1.3 में ये नए ऑपरेशन भी शामिल किए गए हैं:
QUANTIZED_LSTMIFWHILEELUHARD_SWISHFILLRANK
एमएल से जुड़े नए कंट्रोल
NNAPI 1.3 में, मशीन लर्निंग को आसानी से चलाने में मदद करने के लिए नए कंट्रोल जोड़े गए हैं:
QoS API: क्वालिटी ऑफ़ सर्विस (QoS) API के नए वर्शन में, 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()
ज़्यादा जानने के लिए, न्यूरल नेटवर्क मेमोरी डोमेन का सैंपल देखें.
डिपेंडेंसी एपीआई और सिंक फ़ेंस की सुविधा: 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 दिख रहा है या नहीं.
अपने ऐप्लिकेशन के व्यू को आईएमई के दिखने और गायब होने के साथ सिंक करने के लिए, View.setWindowInsetsAnimationCallback() को WindowInsetsAnimation.Callback देकर, व्यू पर लिसनर सेट करें.
(इस लिसनर को किसी भी व्यू पर सेट किया जा सकता है. यह ज़रूरी नहीं है कि यह EditText हो.)
IME, लिसनर के onPrepare() तरीके को कॉल करता है. इसके बाद, ट्रांज़िशन की शुरुआत में onStart() को कॉल करता है. इसके बाद, यह ट्रांज़िशन के हर प्रोग्रेशन पर onProgress() को कॉल करता है. ट्रांज़िशन पूरा होने के बाद, IME onEnd() को कॉल करता है.
ट्रांज़िशन के दौरान किसी भी समय, WindowInsetsAnimation.getFraction() को कॉल करके यह पता लगाया जा सकता है कि ट्रांज़िशन की प्रोसेस कितनी पूरी हुई है.
इन एपीआई का इस्तेमाल करने के तरीके का उदाहरण देखने के लिए, WindowInsetsAnimation के नए कोड का सैंपल देखें.
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() {} });
आईसीयू लाइब्रेरी से जुड़े अपडेट
Android 11, android.icu पैकेज को अपडेट करता है, ताकि वह ICU लाइब्रेरी के वर्शन 66 का इस्तेमाल कर सके. Android 10 में, यह वर्शन 63 था. लाइब्रेरी के नए वर्शन में, अपडेट किया गया CLDR लोकल डेटा शामिल है. साथ ही, Android में अंतरराष्ट्रीय स्तर पर उपलब्ध कराने की सहायता सुविधा में कई सुधार किए गए हैं.
लाइब्रेरी के नए वर्शन में ये बदलाव किए गए हैं:
- अब कई फ़ॉर्मैटिंग एपीआई, नए रिटर्न ऑब्जेक्ट टाइप के साथ काम करते हैं. यह
FormattedValueको बढ़ाता है. LocaleMatcherएपीआई को बेहतर बनाया गया है. इसमें बिल्डर क्लास,java.util.Localeटाइप के लिए सहायता, और मैच के बारे में अतिरिक्त डेटा दिखाने वाली नतीजे की क्लास शामिल है.- अब यूनिकोड 13 का इस्तेमाल किया जा सकता है.
मीडिया
MediaCodec बफ़र असाइन करना
Android 11 में नया MediaCodec API शामिल है. इससे ऐप्लिकेशन को इनपुट और आउटपुट बफ़र असाइन करते समय ज़्यादा कंट्रोल मिलता है. इससे आपका ऐप्लिकेशन, मेमोरी को बेहतर तरीके से मैनेज कर पाता है.
नई क्लास:
नए तरीके:
MediaCodec.getQueueRequest()MediaCodec.getOutputFrame()MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
इसके अलावा, MediaCodec.Callback() में दो तरीकों के काम करने के तरीके में बदलाव किया गया है:
onInputBufferAvailable()- अगर Block Model API का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है, तो ऐप्लिकेशन को इंडेक्स के साथ
MediaCodec.getInputBuffer()औरMediaCodec.queueInputBuffer()को कॉल करने के बजाय, इंडेक्स के साथMediaCodec.getQueueRequestका इस्तेमाल करना चाहिए. साथ ही, स्लॉट में LinearBlock/HardwareBuffer अटैच करना चाहिए. onOutputBufferAvailable()- इंडेक्स के साथ
MediaCodec.getOutputBuffer()को कॉल करने के बजाय, ऐप्लिकेशन इंडेक्स के साथMediaCodec.getOutputFrame()का इस्तेमाल करके, ज़्यादा जानकारी और LinearBlock/HardwareBuffer बफ़र वालाOutputFrameऑब्जेक्ट पा सकते हैं.
MediaCodec में लो-लेटेंसी डिकोडिंग
Android 11 में, MediaCodec को बेहतर बनाया गया है. इससे गेम और अन्य रीयल-टाइम ऐप्लिकेशन के लिए, कम इंतज़ार के समय में डिकोडिंग की सुविधा मिलती है. MediaCodecInfo.CodecCapabilities.isFeatureSupported() को FEATURE_LowLatency पास करके, यह देखा जा सकता है कि कोई कोडेक कम समय में डिकोड करने की सुविधा के साथ काम करता है या नहीं.
कम इंतज़ार के साथ डिकोडिंग की सुविधा चालू या बंद करने के लिए, इनमें से कोई एक तरीका अपनाएं:
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 में, cast और mediarouter API का इस्तेमाल करने वाले ऐप्लिकेशन के लिए नया तरीका लागू किया गया है.
किसी ऐप्लिकेशन से कास्टिंग के विकल्पों को ऐक्सेस करने के साथ-साथ, डिवाइस बदलने के विकल्प सिस्टम मीडिया प्लेयर में भी दिखते हैं. इससे उपयोगकर्ता को अलग-अलग डिवाइसों पर कॉन्टेंट देखने और सुनने का बेहतर अनुभव मिलता है. जैसे, किचन में वीडियो देखने के बजाय फ़ोन पर वीडियो देखना या घर या कार में ऑडियो सुनना. आउटपुट स्विचर देखें.
कनेक्टिविटी
वाई-फ़ाई पासपॉइंट की सुविधाओं को बेहतर बनाया गया है
Android 11 में जोड़ी गई Passpoint की सुविधाओं के बारे में जानने के लिए, Passpoint पर जाएं.
वाई-फ़ाई का सुझाव देने वाले एपीआई को बड़ा किया गया है
Android 11 में, Wi-Fi Suggestion API को बेहतर बनाया गया है. इससे आपके ऐप्लिकेशन को नेटवर्क मैनेज करने की ज़्यादा सुविधाएं मिलती हैं. इनमें ये शामिल हैं:
- कनेक्टिविटी मैनेज करने वाले ऐप्लिकेशन, डिसकनेक्ट करने के अनुरोधों को अनुमति देकर अपने नेटवर्क मैनेज कर सकते हैं.
- Passpoint नेटवर्क को Suggestion API में इंटिग्रेट किया जाता है. साथ ही, इन्हें उपयोगकर्ता को सुझाया जा सकता है.
- 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 वीपीएन कनेक्शन सेट अप करने के लिए ज़रूरी कोड को आसान बनाया जा सकता है.
हर प्रोसेस के लिए नेटवर्क ऐक्सेस कंट्रोल
हर प्रोसेस के हिसाब से नेटवर्क ऐक्सेस चालू करने के बारे में जानने के लिए, नेटवर्क के इस्तेमाल को मैनेज करना लेख पढ़ें.
एक ही FQDN के साथ, Passpoint के कई कॉन्फ़िगरेशन इंस्टॉल करने की अनुमति दें
Android 11 से, PasspointConfiguration ऑब्जेक्ट के लिए यूनीक आइडेंटिफ़ायर पाने के लिए, PasspointConfiguration.getUniqueId() का इस्तेमाल किया जा सकता है. इससे आपके ऐप्लिकेशन के उपयोगकर्ता, पूरी तरह से क्वालिफ़ाइड एक ही डोमेन नेम (एफ़क्यूडीएन) का इस्तेमाल करके, कई प्रोफ़ाइलें इंस्टॉल कर सकते हैं.
यह सुविधा तब काम आती है, जब कोई कैरियर अपने नेटवर्क पर मोबाइल कंट्री कोड (एमसीसी) और मोबाइल नेटवर्क कोड (एमएनसी) के एक से ज़्यादा कॉम्बिनेशन डिप्लॉय करता है, लेकिन उसके पास सिर्फ़ एक FQDN होता है. Android 11 और इसके बाद के वर्शन में, एक ही FQDN वाली एक से ज़्यादा प्रोफ़ाइलें इंस्टॉल की जा सकती हैं. जब उपयोगकर्ता, एमसीसी या एमएनसी वाला सिम इंस्टॉल करता है, तो ये प्रोफ़ाइलें, होम प्रोवाइडर के नेटवर्क से मैच करेंगी.
GNSS ऐंटीना के साथ काम करता है
Android 11 में GnssAntennaInfo क्लास को पेश किया गया है. इससे आपका ऐप्लिकेशन, ग्लोबल नेविगेशन सैटेलाइट सिस्टम (जीएनएसएस) से मिलने वाली सेंटीमीटर-सटीक पोज़िशनिंग का ज़्यादा इस्तेमाल कर सकता है.
ऐंटेना कैलिब्रेशन की जानकारी से जुड़ी गाइड में इसके बारे में ज़्यादा जानें.
ग्राफ़िक
एनडीके इमेज डीकोडर
NDK ImageDecoder API, Android C/C++ ऐप्लिकेशन के लिए एक स्टैंडर्ड एपीआई उपलब्ध कराता है. इसकी मदद से, इमेज को सीधे तौर पर डिकोड किया जा सकता है. ऐप्लिकेशन डेवलपर को अब फ़्रेमवर्क एपीआई (जेएनआई के ज़रिए) का इस्तेमाल करने या तीसरे पक्ष की इमेज-डिकोडिंग लाइब्रेरी को बंडल करने की ज़रूरत नहीं है. ज़्यादा जानकारी के लिए, इमेज डिकोडर डेवलपर गाइड देखें.
फ़्रेम रेट एपीआई
Android 11 में एक एपीआई उपलब्ध है. इसकी मदद से ऐप्लिकेशन, सिस्टम को अपने फ़्रेम रेट के बारे में बता सकते हैं. इससे उन डिवाइसों पर जडरिंग (स्क्रीन पर इमेज का तेज़ी से कांपना) की समस्या कम हो जाती है जिन पर कई रिफ़्रेश रेट काम करते हैं. इस एपीआई को इस्तेमाल करने के तरीके के बारे में जानने के लिए, फ़्रेम रेट गाइड देखें.
कम इंतज़ार के समय के साथ काम करने की सुविधा के लिए अनुरोध करना और यह देखना कि यह सुविधा काम करती है या नहीं
कुछ डिसप्ले, ग्राफ़िक की पोस्ट-प्रोसेसिंग कर सकते हैं. जैसे, कुछ बाहरी डिसप्ले और टीवी. पोस्ट-प्रोसेसिंग से ग्राफ़िक बेहतर होते हैं. हालांकि, इससे गेम के रिस्पॉन्स में लगने वाला समय बढ़ सकता है. एचडीएमआई 2.1 के साथ काम करने वाले नए डिसप्ले में, ऑटो लो लेटेंसी मोड (एएलएलएम, इसे गेम मोड भी कहा जाता है) होता है. यह मोड, पोस्ट-प्रोसेसिंग को बंद करके लेटेंसी को कम करता है. एएलएलएम के बारे में ज़्यादा जानकारी के लिए, एचडीएमआई 2.1 स्पेसिफ़िकेशन देखें.
अगर ऑटो लो-लेटेंसी मोड उपलब्ध है, तो कोई विंडो इसका इस्तेमाल करने का अनुरोध कर सकती है. एएलएलएम खास तौर पर गेम और वीडियो कॉन्फ़्रेंसिंग जैसे ऐप्लिकेशन के लिए फ़ायदेमंद है. इनमें सबसे अच्छे ग्राफ़िक होने के बजाय, कम से कम देरी होना ज़्यादा ज़रूरी होता है.
पोस्ट-प्रोसेसिंग की सुविधा को चालू या बंद करने के लिए, कॉल
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()को कॉल करें. - आपके पास IME की कार्रवाइयों का अनुरोध करने का विकल्प होता है. जैसे, "enter" और "next". इसके अलावा, उन विंडो के स्क्रीनशॉट का अनुरोध भी किया जा सकता है जिनमें
FLAG_SECUREफ़्लैग चालू नहीं है.
कुछ और सुविधाएं
ऐप्लिकेशन प्रोसेस बंद होने की वजहें
Android 11 में ActivityManager.getHistoricalProcessExitReasons() तरीका पेश किया गया है. यह हाल ही में बंद हुई किसी भी प्रोसेस की वजहों के बारे में बताता है. ऐप्लिकेशन इस तरीके का इस्तेमाल करके, क्रैश की गड़बड़ी की जानकारी इकट्ठा कर सकते हैं. जैसे, प्रोसेस बंद होने की वजह एएनआर, मेमोरी की समस्याएं या अन्य वजहें हैं या नहीं.
इसके अलावा, कस्टम स्टेट की जानकारी को सेव करने के लिए, नए setProcessStateSummary() तरीके का इस्तेमाल किया जा सकता है, ताकि बाद में उसका विश्लेषण किया जा सके.
getHistoricalProcessExitReasons() तरीके से, ApplicationExitInfo क्लास के इंस्टेंस मिलते हैं. इसमें ऐप्लिकेशन प्रोसेस के बंद होने से जुड़ी जानकारी होती है. इस क्लास के इंस्टेंस पर getReason() को कॉल करके, यह पता लगाया जा सकता है कि आपके ऐप्लिकेशन की प्रोसेस को क्यों बंद किया गया. उदाहरण के लिए, REASON_CRASH की रिटर्न वैल्यू से पता चलता है कि आपके ऐप्लिकेशन में एक ऐसा अपवाद हुआ है जिसे हैंडल नहीं किया गया है. अगर आपके ऐप्लिकेशन को यह पक्का करना है कि एग्ज़िट इवेंट यूनीक हों, तो वह ऐप्लिकेशन के हिसाब से आइडेंटिफ़ायर बनाए रख सकता है. जैसे, getTimestamp() तरीके से मिले टाइमस्टैंप के आधार पर हैश वैल्यू.
अन्य संसाधन
ज़्यादा जानकारी के लिए, Medium पर Android 11 के नए टूल, जो ऐप्लिकेशन को ज़्यादा निजी और स्थिर बनाते हैं के बारे में लेख पढ़ें.
संसाधन लोड करने वाले
Android 11 में एक नया एपीआई पेश किया गया है. इससे ऐप्लिकेशन, संसाधनों को खोजने और लोड करने के तरीके को डाइनैमिक तरीके से बढ़ा सकते हैं. नई एपीआई क्लास ResourcesLoader और ResourcesProvider मुख्य रूप से नई सुविधा देने के लिए ज़िम्मेदार हैं. इन दोनों की मदद से, अतिरिक्त संसाधन और ऐसेट उपलब्ध कराई जा सकती हैं. इसके अलावा, मौजूदा संसाधनों और ऐसेट की वैल्यू में बदलाव किया जा सकता है.
ResourcesLoader ऑब्जेक्ट ऐसे कंटेनर होते हैं जो किसी ऐप्लिकेशन के Resources इंस्टेंस को ResourcesProvider ऑब्जेक्ट सप्लाई करते हैं. बदले में, ResourcesProvider ऑब्जेक्ट, APK और संसाधन टेबल से संसाधन डेटा लोड करने के तरीके उपलब्ध कराते हैं.
इस एपीआई का मुख्य इस्तेमाल, कस्टम ऐसेट लोड करने के लिए किया जाता है. फ़ाइल पर आधारित संसाधनों और ऐसेट के रिज़ॉल्यूशन को रीडायरेक्ट करने वाले ResourcesProvider को बनाने के लिए, loadFromDirectory() का इस्तेमाल किया जा सकता है. इससे ऐप्लिकेशन के APK के बजाय, किसी खास डायरेक्ट्री को खोजा जा सकता है. इन ऐसेट को AssetManager एपीआई क्लास के open() फ़ैमिली ऑफ़ मेथड के ज़रिए ऐक्सेस किया जा सकता है. ठीक उसी तरह जैसे APK में बंडल की गई ऐसेट को ऐक्सेस किया जाता है.
APK सिग्नेचर स्कीम v4
Android 11 में, APK सिग्नेचर स्कीम v4 के लिए सहायता जोड़ी गई है. इस स्कीम में, एक अलग फ़ाइल (apk-name.apk.idsig) में नए तरह का सिग्नेचर तैयार किया जाता है. हालांकि, यह v2 और v3 की तरह ही काम करती है. एपीके में कोई बदलाव नहीं किया जाता. इस स्कीम में 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 API क्लास में मौजूद इन नए तरीकों को आईडी पास करके, MIME ग्रुप के कॉन्टेंट को ऐक्सेस और अपडेट किया जा सकता है:
प्रोग्राम के हिसाब से किसी MIME ग्रुप में MIME टाइप जोड़ने पर, यह ठीक उसी तरह काम करता है जिस तरह मेनिफ़ेस्ट में साफ़ तौर पर बताया गया स्टैटिक MIME टाइप काम करता है.
ऑटोमैटिक भरने की सुविधा से जुड़े सुधार
Android 11 में, ऑटोमैटिक भरने की सेवाओं को बेहतर बनाया गया है.
AssistStructure.ViewNode में हिंट आइडेंटिफ़ायर
ऑटोमैटिक भरने की सेवाओं के लिए, व्यू की प्रॉपर्टी के आधार पर व्यू के लिए सिग्नेचर हैश का हिसाब लगाना अक्सर फ़ायदेमंद होता है. सिग्नेचर हैश का हिसाब लगाते समय, व्यू हिंट को शामिल करना एक खास प्रॉपर्टी है. हालांकि, फ़ोन के स्थान-भाषा के हिसाब से हिंट स्ट्रिंग बदल सकती है. इस समस्या को हल करने के लिए, Android 11 में AssistStructure.ViewNode को getHintIdEntry() के नए तरीके के साथ जोड़ा गया है. यह तरीका, व्यू के हिंट टेक्स्ट के लिए संसाधन आइडेंटिफ़ायर दिखाता है. इस
तरीके से, भाषा से जुड़ी जानकारी के बिना वैल्यू मिलती है. इसका इस्तेमाल, हस्ताक्षर के हैश
कैलकुलेट करने के लिए किया जा सकता है.
दिखाए गए डेटासेट के इवेंट
Android 11 में, ऑटोमैटिक जानकारी भरने की सेवाओं को यह पता लगाने का तरीका मिलता है कि किन मामलों में, ऑटोमैटिक जानकारी भरने की सेवा ने डेटासेट दिखाए, लेकिन उपयोगकर्ता ने उनमें से किसी को भी नहीं चुना. इससे, ऑटोमैटिक जानकारी भरने की सेवाएं अपने सुझावों को बेहतर बना पाती हैं. Android 11 में,
FillEventHistory
एक नए
TYPE_DATASETS_SHOWN
इवेंट टाइप की रिपोर्ट करता है. FillEventHistory इस तरह के इवेंट को तब लॉग करता है, जब अपने-आप भरने की सुविधा, उपयोगकर्ता को एक या उससे ज़्यादा डेटासेट दिखाती है. ऑटोमैटिक भरने की सेवाएं, इन इवेंट का इस्तेमाल मौजूदा TYPE_DATASET_SELECTED इवेंट के साथ कर सकती हैं. इससे यह पता लगाया जा सकता है कि उपयोगकर्ता ने ऑटोमैटिक भरने के लिए दिए गए विकल्पों में से किसी को चुना है या नहीं.
IME इंटिग्रेशन
कीबोर्ड और अन्य आईएमई अब ड्रॉप-डाउन मेन्यू में दिखाने के बजाय, सुझाव वाली पट्टी या मिलते-जुलते इंटरफ़ेस में, लाइन में ही ऑटोमैटिक भरने के सुझाव दिखा सकते हैं. पासवर्ड और क्रेडिट कार्ड नंबर जैसी संवेदनशील जानकारी को सुरक्षित रखने के लिए, सुझाव उपयोगकर्ता को दिखाए जाते हैं. हालांकि, जब तक उपयोगकर्ता किसी सुझाव को नहीं चुनता, तब तक आईएमई को इसकी जानकारी नहीं होती. आईएमई और Password Manager, इस सुविधा के साथ कैसे काम कर सकते हैं, इस बारे में जानने के लिए कीबोर्ड के साथ ऑटोमैटिक भरने की सुविधा को इंटिग्रेट करना लेख पढ़ें.
कॉन्टेंट कैप्चर करने की सेवा के साथ डेटा शेयर करना
Android 11 से, आपका ऐप्लिकेशन डिवाइस की कॉन्टेंट कैप्चर सेवा के साथ डेटा शेयर कर सकता है. इस सुविधा की मदद से, डिवाइस को कॉन्टेक्स्ट के हिसाब से जानकारी देने में आसानी होती है. जैसे, उपयोगकर्ता के आस-पास चल रहे गाने का नाम दिखाना.
अपने ऐप्लिकेशन का डेटा, कॉन्टेंट कैप्चर करने वाली सेवा के लिए उपलब्ध कराने के लिए, ContentCaptureManager के किसी इंस्टेंस पर shareData() तरीके को कॉल करें. अगर सिस्टम, डेटा शेयर करने का अनुरोध स्वीकार करता है, तो आपके ऐप्लिकेशन को सिर्फ़ लिखने की अनुमति वाला फ़ाइल डिस्क्रिप्टर मिलता है. इसे कॉन्टेंट कैप्चर करने वाली सेवा के साथ शेयर किया जा सकता है.