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 इन बड़े डेटासेट को शेयर किए गए डेटा ब्लॉब का इस्तेमाल करके, डिवाइस पर कैश मेमोरी में सेव करने की अनुमति देता है. डेटासेट शेयर करने के बारे में ज़्यादा जानने के लिए, बड़े डेटासेट शेयर करने के बारे में ज़्यादा जानकारी देने वाली गाइड देखें.
उपयोगकर्ता के क्रेडेंशियल के बिना, ओटीए रीस्टार्ट के बाद अलग-अलग फ़ाइलों को अलग-अलग तरीकों से एन्क्रिप्ट (सुरक्षित) करने का तरीका
जब डिवाइस ओटीए अपडेट पूरा कर लेता है और रीस्टार्ट हो जाता है, तो क्रेडेंशियल-प्रोटेक्टेड स्टोरेज में रखी गई क्रेडेंशियल एन्क्रिप्टेड कुंजियां (सीई), फ़ाइल-आधारित एन्क्रिप्शन (एफ़बीई) ऑपरेशन के लिए तुरंत उपलब्ध हो जाती हैं. इसका मतलब है कि ओटीए अपडेट के बाद, आपका ऐप्लिकेशन उन कार्रवाइयों को फिर से शुरू कर सकता है जिनके लिए सीई पासकोड की ज़रूरत होती है. ऐसा उपयोगकर्ता के पिन, पैटर्न या पासवर्ड डालने से पहले किया जा सकता है.
परफ़ॉर्मेंस और क्वालिटी
वायरलेस डीबगिंग
Android 11 में, Android डीबग ब्रिज (एडीबी) की मदद से, आपके वर्कस्टेशन से ऐप्लिकेशन को वायरलेस तरीके से डिप्लॉय और डीबग किया जा सकता है. उदाहरण के लिए, डीबग करने लायक ऐप्लिकेशन को कई रिमोट डिवाइसों पर डिप्लॉय किया जा सकता है. इसके लिए, आपको अपने डिवाइस को यूएसबी से कनेक्ट करने की ज़रूरत नहीं है. साथ ही, यूएसबी कनेक्शन से जुड़ी आम समस्याओं, जैसे कि ड्राइवर इंस्टॉल करने की समस्या का सामना नहीं करना पड़ता. ज़्यादा जानकारी के लिए, हार्डवेयर डिवाइस पर ऐप्लिकेशन चलाना लेख पढ़ें.
एडीबी इंक्रीमेंटल APK इंस्टॉलेशन
किसी डिवाइस पर बड़े (2 जीबी से ज़्यादा) APK इंस्टॉल करने में काफ़ी समय लग सकता है. भले ही, ऐप्लिकेशन में सिर्फ़ छोटा सा बदलाव किया गया हो. ADB (Android डीबग ब्रिज) इंक्रीमेंटल APK इंस्टॉलेशन की सुविधा, इस प्रोसेस को तेज़ करती है. इसके लिए, यह ऐप्लिकेशन को लॉन्च करने के लिए ज़रूरी APK इंस्टॉल करती है. साथ ही, बाकी डेटा को बैकग्राउंड में स्ट्रीम करती है. अगर डिवाइस पर यह सुविधा काम करती है और आपके पास SDK Platform-Tools का नया वर्शन इंस्टॉल है, तो adb install इस सुविधा का इस्तेमाल अपने-आप करेगा. अगर यह सुविधा काम नहीं करती है, तो इंस्टॉलेशन के डिफ़ॉल्ट तरीके का इस्तेमाल किया जाता है.
इस सुविधा का इस्तेमाल करने के लिए, इस adb कमांड का इस्तेमाल करें. अगर डिवाइस पर इंक्रीमेंटल इंस्टॉलेशन की सुविधा काम नहीं करती है, तो कमांड काम नहीं करता और ज़्यादा शब्दों में जानकारी प्रिंट करता है.
adb install --incremental
एडीबी इंक्रीमेंटल APK इंस्टॉल करने से पहले, आपको अपने APK पर साइन करना होगा और APK सिग्नेचर स्कीम v4 फ़ाइल बनानी होगी. इस सुविधा के काम करने के लिए, v4 सिग्नेचर फ़ाइल को APK के बगल में रखना ज़रूरी है.
नेटिव मेमोरी ऐलोकेटर का इस्तेमाल करके गड़बड़ी का पता लगाना
GWP-ASan, नेटिव मेमोरी ऐलोकेटर की एक सुविधा है. इससे use-after-free और heap-buffer-overflow गड़बड़ियों का पता लगाने में मदद मिलती है. इस सुविधा को दुनिया भर में या अपने ऐप्लिकेशन के कुछ सबप्रोसेस के लिए चालू किया जा सकता है. ज़्यादा जानने के लिए, GWP-Asan गाइड देखें.
Neural Networks API 1.3
Android 11, न्यूरल नेटवर्क एपीआई (NNAPI) को बेहतर बनाता है और इसमें नई सुविधाएं जोड़ता है.
नए ऑपरेशन
NNAPI 1.3 में एक नया ऑपरेंड टाइप, TENSOR_QUANT8_ASYMM_SIGNED जोड़ा गया है. इससे TensorFlow लाइट की नई क्वांटाइज़ेशन स्कीम को इस्तेमाल किया जा सकता है.
इसके अलावा, NNAPI 1.3 में ये नए ऑपरेशन जोड़े गए हैं:
QUANTIZED_LSTMIFWHILEELUHARD_SWISHFILLRANK
मशीन लर्निंग के नए कंट्रोल
NNAPI 1.3 में नए कंट्रोल जोड़े गए हैं, ताकि मशीन लर्निंग आसानी से काम कर सके:
QoS API: नए Quality of Service API में, 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 थर्मल एपीआई का इस्तेमाल करके, डिवाइस के तापमान में होने वाले बदलावों पर नज़र रखें. इसके बाद, बैटरी की कम खपत और डिवाइस के तापमान को कम रखने के लिए कार्रवाई करें. यह एपीआई, Java Thermal API की तरह है. इसका इस्तेमाल, डिवाइस के तापमान की स्थिति में होने वाले किसी भी बदलाव की सूचनाएं पाने या मौजूदा स्थिति को सीधे पोल करने के लिए किया जा सकता है.
टेक्स्ट और इनपुट
आईएमई ट्रांज़िशन को बेहतर बनाया गया
Android 11 में, इनपुट मेथड एडिटर (आईएमई) के लिए ट्रांज़िशन को बेहतर बनाने के लिए नए एपीआई जोड़े गए हैं. जैसे, ऑन-स्क्रीन कीबोर्ड. इन एपीआई की मदद से, आईएमई के दिखने और न दिखने के साथ-साथ, स्टेटस और नेविगेशन बार जैसे अन्य एलिमेंट के साथ सिंक करके, ऐप्लिकेशन के कॉन्टेंट में बदलाव करना आसान हो जाता है.
किसी EditText पर फ़ोकस होने के दौरान आईएमई दिखाने के लिए, view.getInsetsController().show(Type.ime()) को कॉल करें.
(इस तरीके को फ़ोकस किए गए EditText की हैरारकी में मौजूद किसी भी व्यू पर कॉल किया जा सकता है. इसके लिए, आपको खास तौर पर EditText पर कॉल करने की ज़रूरत नहीं है.) आईएमई को छिपाने के लिए, view.getInsetsController().hide(Type.ime()) को कॉल करें.
view.getRootWindowInsets().isVisible(Type.ime()) को कॉल करके, यह देखा जा सकता है कि आईएमई फ़िलहाल दिख रहा है या नहीं.
आईएमई के दिखने और गायब होने के साथ अपने ऐप्लिकेशन के व्यू को सिंक करने के लिए, View.setWindowInsetsAnimationCallback() को WindowInsetsAnimation.Callback देकर व्यू पर लिसनर सेट करें.
(इस लिसनर को किसी भी व्यू पर सेट किया जा सकता है. इसके लिए, EditText होना ज़रूरी नहीं है.)
आईएमई, आपके लिसनर के
onPrepare()
मेथड को कॉल करता है. इसके बाद, ट्रांज़िशन की शुरुआत में
onStart()
को कॉल करता है. इसके बाद, यह ट्रांज़िशन में हर प्रोग्रेशन पर
onProgress()
को कॉल करता है. ट्रांज़िशन पूरा होने पर, आईएमई onEnd() को कॉल करता है.
ट्रांज़िशन के दौरान किसी भी समय, WindowInsetsAnimation.getFraction() पर कॉल करके यह पता लगाया जा सकता है कि ट्रांज़िशन की प्रोसेस कितनी पूरी हो गई है.
इन एपीआई को इस्तेमाल करने के तरीके का उदाहरण देखने के लिए, नया WindowInsetsAnimation कोड सैंपल देखें.
आईएमई ऐनिमेशन को कंट्रोल करना
आपके पास आईएमई ऐनिमेशन या नेविगेशन बार जैसे किसी अन्य सिस्टम बार के ऐनिमेशन को कंट्रोल करने का विकल्प भी होता है. ऐसा करने के लिए, पहले
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; } });
आईएमई या अन्य सिस्टम बार को मूव करने के लिए, कंट्रोलर के
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 पैकेज को अपडेट करता है, ताकि आईसीयू लाइब्रेरी के वर्शन 66 का इस्तेमाल किया जा सके. वहीं, Android 10 में वर्शन 63 का इस्तेमाल किया जाता है. लाइब्रेरी के नए वर्शन में, अपडेट किया गया सीएलडीआर स्थानीय डेटा शामिल है. साथ ही, Android में अंतरराष्ट्रीय स्तर पर इस्तेमाल करने की सुविधा को बेहतर बनाने के लिए कई सुधार किए गए हैं.
लाइब्रेरी के नए वर्शन में ये अहम बदलाव किए गए हैं:
- कई फ़ॉर्मैटिंग एपीआई अब एक नए रिटर्न ऑब्जेक्ट टाइप के साथ काम करते हैं. यह ऑब्जेक्ट टाइप,
FormattedValueको एक्सटेंड करता है. LocaleMatcherएपीआई को बेहतर बनाया गया है. इसमें बिल्डर क्लास,java.util.Localeटाइप के लिए सहायता, और मैच के बारे में ज़्यादा डेटा वाली रिज़ल्ट क्लास शामिल है.- अब Unicode 13 का इस्तेमाल किया जा सकता है.
मीडिया
MediaCodec बफ़र असाइन करना
Android 11 में नया MediaCodec एपीआई शामिल है. इससे ऐप्लिकेशन को इनपुट और आउटपुट बफ़र तय करते समय ज़्यादा कंट्रोल मिलता है. इससे आपका ऐप्लिकेशन, मेमोरी को ज़्यादा बेहतर तरीके से मैनेज कर पाता है.
नई क्लास:
नए तरीके:
MediaCodec.getQueueRequest()MediaCodec.getOutputFrame()MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
इसके अलावा, MediaCodec.Callback() में दो तरीकों के काम करने का तरीका बदल गया है:
onInputBufferAvailable()- अगर ऐप्लिकेशन को ब्लॉक मॉडल एपीआई का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है, तो इंडेक्स के साथ
MediaCodec.getInputBuffer()औरMediaCodec.queueInputBuffer()को कॉल करने के बजाय, इंडेक्स के साथMediaCodec.getQueueRequestका इस्तेमाल करना चाहिए. साथ ही, स्लॉट में LinearBlock/HardwareBuffer अटैच करना चाहिए. onOutputBufferAvailable()MediaCodec.getOutputBuffer()को इंडेक्स के साथ कॉल करने के बजाय, ऐप्लिकेशन इंडेक्स के साथMediaCodec.getOutputFrame()का इस्तेमाल कर सकते हैं. इससे उन्हें ज़्यादा जानकारी और LinearBlock/HardwareBuffer बफ़र के साथOutputFrameऑब्जेक्ट मिल सकता है.
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 में, कास्ट और मीडियारूटर एपीआई का इस्तेमाल करने वाले ऐप्लिकेशन के लिए नया तरीका लागू किया गया है.
किसी ऐप्लिकेशन में कास्ट करने के विकल्पों को ऐक्सेस करने के अलावा, सिस्टम मीडिया प्लेयर में भी स्विच करने के विकल्प दिखते हैं. इससे उपयोगकर्ता को एक डिवाइस से दूसरे डिवाइस पर स्विच करने में आसानी होती है. जैसे, किचन में वीडियो देखने के बाद फ़ोन पर वीडियो देखना या घर में ऑडियो सुनने के बाद कार में ऑडियो सुनना. आउटपुट स्विचर देखें.
कनेक्टिविटी
वाई-फ़ाई पासपॉइंट की सुविधा को बेहतर बनाना
Android 11 में जोड़ी गई पासपॉइंट की सुविधाओं के बारे में जानने के लिए, पासपॉइंट लेख पढ़ें.
वाई-फ़ाई के सुझाव देने वाले एपीआई को बेहतर बनाया गया है
Android 11, Wi-Fi Suggestion API को बेहतर बनाता है, ताकि आपके ऐप्लिकेशन की नेटवर्क मैनेजमेंट की क्षमताएं बढ़ाई जा सकें. इनमें ये क्षमताएं शामिल हैं:
- कनेक्टिविटी मैनेजमेंट ऐप्लिकेशन, डिसकनेक्ट करने के अनुरोधों को अनुमति देकर अपने नेटवर्क मैनेज कर सकते हैं.
- पासपॉइंट नेटवर्क, Suggestion API में इंटिग्रेट किए गए हैं. साथ ही, इन्हें उपयोगकर्ता को सुझाया जा सकता है.
- Analytics API की मदद से, अपने नेटवर्क की क्वालिटी के बारे में जानकारी पाई जा सकती है.
CallScreeningService से जुड़े अपडेट
Android 11 से, CallScreeningService, इनकमिंग कॉल के लिए STIR/SHAKEN की पुष्टि की स्थिति (verstat) के बारे में जानकारी का अनुरोध कर सकती है. यह जानकारी, इनकमिंग कॉल के लिए कॉल की जानकारी के हिस्से के तौर पर दी जाती है.
अगर किसी CallScreeningService के पास
READ_CONTACTS
की अनुमति है, तो उपयोगकर्ता के संपर्कों में मौजूद किसी नंबर से इनकमिंग कॉल आने या उस पर आउटगोइंग कॉल करने पर, ऐप्लिकेशन को इसकी सूचना दी जाती है.
ज़्यादा जानकारी के लिए, कॉलर आईडी स्पूफ़िंग को रोकना लेख पढ़ें.
Open Mobile API के अपडेट
Android 11 और इसके बाद के वर्शन पर ओएमएपीआई की सुविधा के बारे में जानकारी पाने के लिए, ओपन मोबाइल एपीआई रीडर की सुविधा देखें.
बेहतर परफ़ॉर्मेंस वाले वीपीएन
एपीआई लेवल 30 और इसके बाद के लेवल को टारगेट करने वाले ऐप्लिकेशन या एपीआई लेवल 29 और इसके बाद के लेवल पर लॉन्च किए गए डिवाइसों पर चलने वाले ऐप्लिकेशन, उपयोगकर्ता के कॉन्फ़िगर किए गए और ऐप्लिकेशन पर आधारित वीपीएन, दोनों के लिए IKEv2/IPsec को वीपीएन पर लागू कर सकते हैं.
वीपीएन, ऑपरेटिंग सिस्टम के नेटिव तौर पर काम करते हैं. इससे किसी ऐप्लिकेशन में IKEv2/IPsec वीपीएन कनेक्शन सेट अप करने के लिए ज़रूरी कोड को आसान बनाया जा सकता है.
हर प्रोसेस के लिए नेटवर्क ऐक्सेस कंट्रोल
हर प्रोसेस के हिसाब से नेटवर्क ऐक्सेस चालू करने के बारे में जानकारी पाने के लिए, नेटवर्क का इस्तेमाल मैनेज करना लेख पढ़ें.
एक ही एफ़क्यूडीएन के साथ, इंस्टॉल किए गए कई Passpoint कॉन्फ़िगरेशन की अनुमति दें
Android 11 और इसके बाद के वर्शन में, PasspointConfiguration.getUniqueId() का इस्तेमाल करके, PasspointConfiguration ऑब्जेक्ट के लिए यूनीक आइडेंटिफ़ायर पाया जा सकता है. इससे आपके ऐप्लिकेशन के उपयोगकर्ता, पूरी तरह क्वालिफ़ाइड डोमेन नेम (एफ़क्यूडीएन) वाले एक ही डोमेन नेम से कई प्रोफ़ाइलें इंस्टॉल कर सकते हैं.
यह सुविधा तब मददगार होती है, जब कोई मोबाइल और इंटरनेट सेवा देने वाली कंपनी अपने नेटवर्क पर मोबाइल देश कोड (एमसीसी) और मोबाइल नेटवर्क कोड (एमएनसी) के एक से ज़्यादा कॉम्बिनेशन को डिप्लॉय करती है. हालांकि, उसके पास सिर्फ़ एक एफ़क्यूडीएन होता है. Android 11 और इसके बाद के वर्शन पर, एक ही एफ़क्यूडीएन वाली एक से ज़्यादा प्रोफ़ाइलें इंस्टॉल की जा सकती हैं. ये प्रोफ़ाइलें, होम प्रोवाइडर के तौर पर नेटवर्क से मैच करेंगी. ऐसा तब होगा, जब उपयोगकर्ता एमसीसी या एमएनसी के साथ सिम इंस्टॉल करेगा.
जीएनएसएस ऐंटीना की सुविधा
Android 11 में
GnssAntennaInfo क्लास को शामिल किया गया है. इससे आपका ऐप्लिकेशन, ग्लोबल नेविगेशन सैटलाइट सिस्टम (जीएनएसएस) से मिलने वाली सेंटीमीटर-ऐक्युरेसी पोज़िशनिंग का ज़्यादा इस्तेमाल कर सकता है.
ऐंटीना कैलिब्रेशन की जानकारी वाली गाइड में ज़्यादा जानें.
ग्राफ़िक
एनडीके (NDK) इमेज डिकोडर
NDK ImageDecoder एपीआई, Android C/C++ ऐप्लिकेशन के लिए एक स्टैंडर्ड एपीआई उपलब्ध कराता है. इससे इमेज को सीधे डिकोड किया जा सकता है. ऐप्लिकेशन डेवलपर को अब जेएनआई के ज़रिए फ़्रेमवर्क एपीआई इस्तेमाल करने या तीसरे पक्ष की इमेज-डिकोडिंग लाइब्रेरी को बंडल करने की ज़रूरत नहीं है. ज़्यादा जानकारी के लिए, इमेज डिकोडर डेवलपर गाइड देखें.
फ़्रेम रेट एपीआई
Android 11 में एक एपीआई उपलब्ध है. इसकी मदद से, ऐप्लिकेशन सिस्टम को अपने फ़्रेम रेट की जानकारी दे सकते हैं. इससे, एक से ज़्यादा रीफ़्रेश रेट वाले डिवाइसों पर वीडियो रुक-रुककर चलने की समस्या कम हो जाती है. इस एपीआई को इस्तेमाल करने के तरीके के बारे में जानने के लिए, फ़्रेम रेट की गाइड देखें.
लो लेटेंसी की सुविधा के लिए अनुरोध करना और इसकी जांच करना
कुछ डिसप्ले, ग्राफ़िक्स की पोस्ट-प्रोसेसिंग कर सकते हैं. जैसे, कुछ बाहरी डिसप्ले और टीवी. इस पोस्ट-प्रोसेसिंग से ग्राफ़िक बेहतर होते हैं. हालांकि, इससे इंतज़ार का समय बढ़ सकता है. एचडीएमआई 2.1 के साथ काम करने वाले नए डिसप्ले में, ऑटो लो लेटेंसी मोड (एएलएलएम, जिसे गेम मोड भी कहा जाता है) होता है. यह पोस्ट-प्रोसेसिंग को बंद करके लेटेंसी को कम करता है. एएलएलएम के बारे में ज़्यादा जानने के लिए, एचडीएमआई 2.1 की खास बातें देखें.
अगर ऑटो लो लेटेंसी मोड उपलब्ध है, तो कोई विंडो इसके इस्तेमाल का अनुरोध कर सकती है. एएलएलएम, गेम और वीडियो कॉन्फ़्रेंसिंग जैसे ऐप्लिकेशन के लिए खास तौर पर मददगार है. इनमें, बेहतरीन ग्राफ़िक्स के मुकाबले कम इंतज़ार का समय ज़्यादा अहम होता है.
पोस्ट-प्रोसेसिंग को कम से कम करने की सुविधा को टॉगल करके चालू या बंद करने के लिए,
Window.setPreferMinimalPostProcessing() को कॉल करें
या विंडो के
preferMinimalPostProcessing
एट्रिब्यूट को true पर सेट करें. सभी डिसप्ले, कम से कम पोस्ट-प्रोसेसिंग की सुविधा के साथ काम नहीं करते. यह पता लगाने के लिए कि कोई डिसप्ले इस सुविधा के साथ काम करता है या नहीं, नए तरीके Display.isMinimalPostProcessingSupported() को कॉल करें.
परफ़ॉर्मेंस ग्राफ़िक्स डीबग लेयर इंजेक्शन
ऐप्लिकेशन अब नेटिव ऐप्लिकेशन कोड में बाहरी ग्राफ़िक्स लेयर (GLES, Vulkan) लोड कर सकते हैं. इससे डीबग करने लायक ऐप्लिकेशन जैसी ही सुविधाएं मिलती हैं. हालांकि, इसके लिए परफ़ॉर्मेंस ओवरहेड की ज़रूरत नहीं होती. यह सुविधा खास तौर पर तब ज़रूरी होती है, जब जीएपीआईडी जैसे टूल की मदद से आपके ऐप्लिकेशन की प्रोफ़ाइल बनाई जाती है. अपने ऐप्लिकेशन की प्रोफ़ाइल बनाने के लिए, ऐप्लिकेशन को डीबग करने लायक बनाने के बजाय, ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में यह मेटा-डेटा एलिमेंट शामिल करें:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
इमेज और कैमरा
कैप्चर करने के दौरान, सूचनाओं की आवाज़ और वाइब्रेशन को म्यूट करना
Android 11 से, कैमरे का इस्तेमाल करते समय आपका ऐप्लिकेशन, setCameraAudioRestriction() का इस्तेमाल करके सिर्फ़ वाइब्रेशन, आवाज़ और वाइब्रेशन दोनों को म्यूट कर सकता है या दोनों को म्यूट नहीं कर सकता.
Android Emulator में कैमरे के लिए बेहतर सुविधाएं
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". साथ ही, उन विंडो के स्क्रीनशॉट का अनुरोध किया जा सकता है जो
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 और रिसॉर्स टेबल से रिसॉर्स डेटा लोड करने के तरीके उपलब्ध कराते हैं.
इस एपीआई का एक मुख्य इस्तेमाल, कस्टम ऐसेट लोड करना है. loadFromDirectory()
का इस्तेमाल करके, ResourcesProvider बनाया जा सकता है. यह फ़ाइल पर आधारित रिसॉर्स और ऐसेट के रिज़ॉल्यूशन को रीडायरेक्ट करता है. इससे, ऐप्लिकेशन APK के बजाय किसी खास डायरेक्ट्री को खोजा जाता है. इन ऐसेट को AssetManager एपीआई क्लास के open() फ़ैमिली के तरीकों से ऐक्सेस किया जा सकता है. ठीक वैसे ही जैसे APK में बंडल की गई ऐसेट को ऐक्सेस किया जाता है.
APK सिग्नेचर स्कीम v4
Android 11 में, APK सिग्नेचर स्कीम v4 के लिए सहायता जोड़ी गई है. इस स्कीम से, एक अलग फ़ाइल (apk-name.apk.idsig) में नए तरह का हस्ताक्षर बनता है. हालांकि, यह v2 और v3 जैसा ही होता है. APK में कोई बदलाव नहीं किया जाता. यह स्कीम, एडीबी इंक्रीमेंटल APK इंस्टॉलेशन के साथ काम करती है. इससे APK को तेज़ी से इंस्टॉल किया जा सकता है.
डाइनैमिक इंटेंट फ़िल्टर
इंटेंट पाने के लिए, किसी ऐप्लिकेशन को कंपाइल के समय यह बताना होगा कि वह किस तरह का डेटा पा सकता है. इसके लिए, ऐप्लिकेशन मेनिफ़ेस्ट में इंटेंट फ़िल्टर तय करना होगा. Android 10 और इससे पहले के वर्शन में, ऐप्लिकेशन के पास रनटाइम के दौरान अपने इंटेंट फ़िल्टर बदलने का कोई तरीका नहीं होता. यह वर्चुअलाइज़ेशन ऐप्लिकेशन (जैसे, वर्चुअल मशीन और रिमोट डेस्कटॉप) के लिए एक समस्या है, क्योंकि उनके पास यह जानने का कोई तरीका नहीं होता कि उपयोगकर्ता उनके अंदर कौनसा सॉफ़्टवेयर इंस्टॉल करेगा.
Android 11 में एमआईएमई ग्रुप की सुविधा जोड़ी गई है. यह एक नया मेनिफ़ेस्ट एलिमेंट है. इसकी मदद से, कोई ऐप्लिकेशन किसी इंटेंट फ़िल्टर में एमआईएमई टाइप के डाइनैमिक सेट का एलान कर सकता है. साथ ही, रनटाइम के दौरान प्रोग्राम के हिसाब से उसमें बदलाव कर सकता है. 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 एपीआई क्लास में, एमआईएमई ग्रुप के आईडी को इन नए तरीकों से पास करके, उसके कॉन्टेंट को ऐक्सेस और अपडेट किया जा सकता है:
जब किसी एमआईएमई ग्रुप में प्रोग्राम के हिसाब से कोई एमआईएमई टाइप जोड़ा जाता है, तो वह ठीक उसी तरह काम करता है जैसे मेनिफ़ेस्ट में साफ़ तौर पर बताया गया स्टैटिक एमआईएमई टाइप.
जानकारी अपने-आप भरने की सुविधा में किए गए सुधार
Android 11 में, ऑटोमैटिक भरने की सुविधा को बेहतर बनाया गया है.
AssistStructure.ViewNode में हिंट आइडेंटिफ़ायर
पासवर्ड अपने-आप भरने, मैनेज करने, और सेव करने की सेवाओं के लिए, व्यू की प्रॉपर्टी के आधार पर व्यू के लिए सिग्नेचर हैश की गिनती करना अक्सर मददगार होता है. व्यू हिंट, सिग्नेचर हैश की गिनती करते समय शामिल करने के लिए एक अच्छी प्रॉपर्टी है. हालांकि, फ़ोन की भाषा के हिसाब से हिंट स्ट्रिंग बदल सकती है. इस समस्या को हल करने के लिए, Android 11 में
AssistStructure.ViewNode
को
getHintIdEntry()
के नए तरीके के साथ
बढ़ाया गया है. यह तरीका, व्यू के हिंट टेक्स्ट के लिए संसाधन आइडेंटिफ़ायर दिखाता है. यह तरीका, स्थानीय भाषा से अलग एक वैल्यू देता है. इसका इस्तेमाल, हस्ताक्षर के हैश की गिनती करने के लिए किया जा सकता है.
डेटासेट दिखाए जाने से जुड़े इवेंट
Android 11 में, जानकारी ऑटोमैटिक भरने वाली सेवाओं को अपने सुझाव बेहतर बनाने में मदद करने के लिए, एक तरीका उपलब्ध कराया गया है. इससे उन मामलों की पहचान की जा सकती है जिनमें जानकारी ऑटोमैटिक भरने वाली सेवा ने डेटासेट दिखाए, लेकिन उपयोगकर्ता ने उनमें से कोई भी डेटासेट नहीं चुना. Android 11 में,
FillEventHistory
एक नए
TYPE_DATASETS_SHOWN
इवेंट टाइप की रिपोर्ट करता है. FillEventHistory इस तरह का इवेंट तब लॉग करता है, जब पासवर्ड अपने-आप भरने, मैनेज करने, और सेव करने की सेवा, उपयोगकर्ता को एक या उससे ज़्यादा डेटासेट दिखाती है. जानकारी अपने-आप भरने की सेवाएं, इन इवेंट का इस्तेमाल मौजूदा TYPE_DATASET_SELECTED इवेंट के साथ कर सकती हैं. इससे यह पता लगाया जा सकता है कि उपयोगकर्ता ने, जानकारी अपने-आप भरने की सेवा के लिए दिए गए विकल्पों में से कोई विकल्प चुना है या नहीं.
आईएमई इंटिग्रेशन
कीबोर्ड और अन्य आईएमई, अब जानकारी अपने-आप भरने की सुविधा के सुझावों को इनलाइन दिखा सकते हैं. ये सुझाव, ड्रॉप-डाउन मेन्यू के बजाय सुझाव वाले बार या मिलते-जुलते इंटरफ़ेस में दिख सकते हैं. पासवर्ड और क्रेडिट कार्ड नंबर जैसी संवेदनशील जानकारी को सुरक्षित रखने के लिए, उपयोगकर्ता को सुझाव दिखाए जाते हैं. हालांकि, आईएमई को तब तक इनकी जानकारी नहीं होती, जब तक उपयोगकर्ता इनमें से कोई सुझाव नहीं चुनता. आईएमई और पासवर्ड मैनेजर इस सुविधा के साथ कैसे काम कर सकते हैं, इस बारे में जानने के लिए कीबोर्ड के साथ ऑटोमैटिक भरने की सुविधा को इंटिग्रेट करना लेख पढ़ें.
कॉन्टेंट कैप्चर करने की सेवा के साथ डेटा शेयर करना
Android 11 से, आपका ऐप्लिकेशन डिवाइस की कॉन्टेंट कैप्चर सेवा के साथ डेटा शेयर कर सकता है. इस सुविधा की मदद से, डिवाइस के लिए कॉन्टेक्स्ट के हिसाब से इंटेलिजेंस उपलब्ध कराना आसान हो जाता है. जैसे, उपयोगकर्ता के आस-पास चल रहे गाने का नाम दिखाना.
कॉन्टेंट कैप्चर करने वाली सेवा को अपने ऐप्लिकेशन का डेटा उपलब्ध कराने के लिए, ContentCaptureManager के इंस्टेंस पर shareData() तरीके को कॉल करें. अगर सिस्टम, डेटा शेयर करने का अनुरोध स्वीकार कर लेता है, तो आपके ऐप्लिकेशन को सिर्फ़ लिखने की अनुमति देने वाला फ़ाइल डिस्क्रिप्टर मिलता है. इसे कॉन्टेंट कैप्चर करने वाली सेवा के साथ शेयर किया जा सकता है.