Android 11 में, डेवलपर के लिए कई नई सुविधाएं और एपीआई उपलब्ध हैं. यहां दिए गए सेक्शन में, आपको अपने ऐप्लिकेशन के लिए उपलब्ध सुविधाओं के बारे में जानने में मदद मिलेगी. साथ ही, इनसे जुड़े एपीआई का इस्तेमाल शुरू करने के बारे में भी जानकारी मिलेगी.
नए, बदले गए, और हटाए गए एपीआई की पूरी सूची देखने के लिए, एपीआई में हुए बदलावों की रिपोर्ट पढ़ें. नए एपीआई के बारे में जानकारी पाने के लिए, Android API का रेफ़रंस देखें. नए एपीआई को हाइलाइट किया गया है, ताकि वे आसानी से दिख सकें. इसके अलावा, उन क्षेत्रों के बारे में जानने के लिए जहां प्लैटफ़ॉर्म में हुए बदलावों का असर आपके ऐप्लिकेशन पर पड़ सकता है, 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 Biometric library में भी दिखते हैं.
पुष्टि करने के तरीके
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 इंस्टॉल करता है. साथ ही, बाकी डेटा को बैकग्राउंड में स्ट्रीम करता है. 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 में, न्यूरल नेटवर्क एपीआई (एनएनएपीआई) को बेहतर बनाया गया है और इसमें कई नई सुविधाएं जोड़ी गई हैं.
नई कार्रवाइयां
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) API के नए वर्शन में, NNAPI में प्राथमिकता तय करने और टास्क की समयसीमा तय करने की सुविधा शामिल है. इसमें ये नए फ़ंक्शन भी शामिल हैं:
मेमोरी डोमेन इनपुट/आउटपुट: NNAPI 1.3 में, मेमोरी डोमेन को इनपुट और आउटपुट के तौर पर इस्तेमाल करने की सुविधा शामिल है. इससे सिस्टम के अलग-अलग कॉम्पोनेंट में मौजूद एक ही डेटा की गैर-ज़रूरी कॉपी हट जाती हैं. इससे Android न्यूरल नेटवर्क की रनटाइम परफ़ॉर्मेंस बेहतर होती है. इस सुविधा से,
ANeuralNetworksMemoryDesc
औरANeuralNetworkMemory
ऑब्जेक्ट के साथ इस्तेमाल करने के लिए, नए NDK एपीआई का एक सेट जोड़ा जाता है. इसमें ये फ़ंक्शन शामिल हैं: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
ऑपरेंड टाइप का इस्तेमाल करके, अन्य मॉडल को आर्ग्युमेंट के तौर पर स्वीकार करते हैं. इसके अलावा, इस सुविधा से ये नए फ़ंक्शन भी जुड़ जाते हैं:
एनडीके थर्मल एपीआई
डिवाइस के ज़्यादा गर्म होने पर, सीपीयू और/या जीपीयू की स्पीड कम हो सकती है. इससे ऐप्लिकेशन पर अनचाहे तरीके से असर पड़ सकता है. ऐसे ऐप्लिकेशन या गेम में समस्याएं आने की ज़्यादा संभावना होती है जिनमें जटिल ग्राफ़िक, ज़्यादा कंप्यूटेशन या लगातार नेटवर्क गतिविधि शामिल होती है.
डिवाइस के तापमान में होने वाले बदलावों को मॉनिटर करने के लिए, Android 11 में NDK Thermal API का इस्तेमाल करें. इसके बाद, डिवाइस के तापमान को कम रखने और बिजली की खपत को कम करने के लिए कार्रवाई करें. यह एपीआई, Java Thermal API की तरह ही है. इसका इस्तेमाल, थर्मल स्टेटस में होने वाले किसी भी बदलाव की सूचना पाने के लिए किया जा सकता है. इसके अलावा, सीधे तौर पर मौजूदा स्टेटस की जानकारी पाने के लिए भी इसका इस्तेमाल किया जा सकता है.
टेक्स्ट और इनपुट
IME ट्रांज़िशन को बेहतर बनाया गया
Android 11 में, इनपुट मेथड एडिटर (आईएमई) के लिए नए एपीआई पेश किए गए हैं. जैसे, स्क्रीन पर दिखने वाले कीबोर्ड. इससे ट्रांज़िशन को बेहतर बनाया जा सकता है. इन एपीआई की मदद से, IME के दिखने और गायब होने के साथ-साथ स्टेटस और नेविगेशन बार जैसे अन्य एलिमेंट के हिसाब से, अपने ऐप्लिकेशन के कॉन्टेंट को आसानी से अडजस्ट किया जा सकता है.
किसी EditText
पर फ़ोकस होने पर IME दिखाने के लिए, view.getInsetsController().show(Type.ime())
को कॉल करें.
(इस तरीके को, फ़ोकस किए गए EditText
के तौर पर एक ही हैरारकी में मौजूद किसी भी व्यू पर कॉल किया जा सकता है. आपको इसे खास तौर पर EditText
पर कॉल करने की ज़रूरत नहीं है.) IME को छिपाने के लिए, कॉल करें
view.getInsetsController().hide(Type.ime())
.
view.getRootWindowInsets().isVisible(Type.ime())
को कॉल करके, यह देखा जा सकता है कि IME फ़िलहाल दिख रहा है या नहीं.
IME के दिखने और गायब होने के साथ-साथ, अपने ऐप्लिकेशन के व्यू को सिंक करने के लिए, व्यू पर एक लिसनर सेट करें. इसके लिए, View.setWindowInsetsAnimationCallback()
को WindowInsetsAnimation.Callback
दें.
(इस लिसनर को किसी भी व्यू पर सेट किया जा सकता है. यह ज़रूरी नहीं है कि यह EditText
हो.)
IME, लिसनर के onPrepare()
तरीके को कॉल करता है. इसके बाद, ट्रांज़िशन की शुरुआत में onStart()
को कॉल करता है. इसके बाद, यह ट्रांज़िशन के हर प्रोग्रेशन पर onProgress()
को कॉल करता है. ट्रांज़िशन पूरा होने के बाद, IME onEnd()
को कॉल करता है.
ट्रांज़िशन के दौरान किसी भी समय, यह पता लगाया जा सकता है कि ट्रांज़िशन की प्रोसेस कहां तक पहुंची है. इसके लिए, WindowInsetsAnimation.getFraction()
को कॉल करें.
इन एपीआई का इस्तेमाल करने के तरीके का उदाहरण देखने के लिए, WindowInsetsAnimation के नए कोड का सैंपल देखें.
IME ऐनिमेशन को कंट्रोल करना
आपके पास IME ऐनिमेशन या नेविगेशन बार जैसे किसी दूसरे सिस्टम बार के ऐनिमेशन को कंट्रोल करने का विकल्प भी होता है. इसके लिए, सबसे पहले setOnApplyWindowInsetsListener()
को कॉल करें, ताकि विंडो इंसर्ट में हुए बदलावों के लिए नया लिसनर सेट किया जा सके:
Kotlin
rootView.setOnApplyWindowInsetsListener { rootView, windowInsets -> val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime()) rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom) // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. WindowInsets.CONSUMED }
Java
mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime()); mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom); // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. return WindowInsets.CONSUMED; } });
IME या अन्य सिस्टम बार को ले जाने के लिए, कंट्रोलर के controlWindowInsetsAnimation()
तरीके को कॉल करें:
Kotlin
view.windowInsetsController.controlWindowInsetsAnimation( Type.ime(), 1000, LinearInterpolator(), cancellationSignal, object : WindowInsetsAnimationControlListener() { fun onReady(controller: WindowInsetsAnimationController, types: Int) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */) } } );
Java
mRoot.getWindowInsetsController().controlWindowInsetsAnimation( Type.ime(), 1000, new LinearInterpolator(), cancellationSignal, new WindowInsetsAnimationControlListener() { @Override public void onReady( @NonNull WindowInsetsAnimationController controller, int types ) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */); } @Override public void onCancelled() {} });
आईसीयू लाइब्रेरी से जुड़े अपडेट
Android 11, android.icu
पैकेज को अपडेट करता है, ताकि ICU लाइब्रेरी के वर्शन 66 का इस्तेमाल किया जा सके. Android 10 में, इस लाइब्रेरी के वर्शन 63 का इस्तेमाल किया जाता था. लाइब्रेरी के नए वर्शन में, CLDR के अपडेट किए गए स्थानीय डेटा के साथ-साथ Android में अंतरराष्ट्रीय स्तर पर उपलब्ध कराने की सहायता सुविधा से जुड़े कई सुधार शामिल हैं.
लाइब्रेरी के नए वर्शन में ये मुख्य बदलाव किए गए हैं:
- अब कई फ़ॉर्मैटिंग एपीआई, नए तरह के रिटर्न ऑब्जेक्ट के साथ काम करते हैं. यह
FormattedValue
को बढ़ाता है. LocaleMatcher
एपीआई को बेहतर बनाया गया है. इसमें बिल्डर क्लास,java.util.Locale
टाइप के लिए सहायता, और मैच के बारे में अतिरिक्त डेटा दिखाने वाली नतीजे की क्लास शामिल है.- अब यूनिकोड 13 का इस्तेमाल किया जा सकता है.
मीडिया
MediaCodec बफ़र असाइन करना
Android 11 में नया MediaCodec
एपीआई शामिल है. इससे ऐप्लिकेशन को इनपुट और आउटपुट बफ़र असाइन करते समय ज़्यादा कंट्रोल मिलता है. इससे आपका ऐप्लिकेशन, मेमोरी को बेहतर तरीके से मैनेज कर पाता है.
नई क्लास:
नए तरीके:
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++ ऐप्लिकेशन के लिए एक स्टैंडर्ड API उपलब्ध कराता है. इससे इमेज को सीधे तौर पर डिकोड किया जा सकता है. ऐप्लिकेशन डेवलपर को अब फ़्रेमवर्क एपीआई (जेएनआई के ज़रिए) का इस्तेमाल करने या तीसरे पक्ष की इमेज-डिकोडिंग लाइब्रेरी को बंडल करने की ज़रूरत नहीं है. ज़्यादा जानकारी के लिए, इमेज डिकोडर के लिए डेवलपर गाइड देखें.
फ़्रेम रेट एपीआई
Android 11 में एक एपीआई उपलब्ध है. इसकी मदद से ऐप्लिकेशन, सिस्टम को अपने फ़्रेम रेट के बारे में बता सकते हैं. इससे उन डिवाइसों पर जडरिंग (स्क्रीन पर इमेज का तेज़ी से कांपना) की समस्या कम हो जाती है जिन पर कई रिफ़्रेश रेट काम करते हैं. इस एपीआई को इस्तेमाल करने के तरीके के बारे में जानने के लिए, फ़्रेम रेट की गाइड देखें.
कम इंतज़ार के समय के साथ काम करने की सुविधा के लिए अनुरोध करना और यह देखना कि यह सुविधा काम करती है या नहीं
कुछ डिसप्ले, ग्राफ़िक की पोस्ट-प्रोसेसिंग कर सकते हैं. जैसे, कुछ बाहरी डिसप्ले और टीवी. पोस्ट-प्रोसेसिंग से ग्राफ़िक बेहतर होते हैं, लेकिन इससे विलंबता बढ़ सकती है. एचडीएमआई 2.1 के साथ काम करने वाले नए डिसप्ले में, ऑटो लो लेटेंसी मोड (एएलएलएम, इसे गेम मोड भी कहा जाता है) होता है. यह मोड, पोस्ट-प्रोसेसिंग को बंद करके लेटेंसी को कम करता है. एएलएलएम के बारे में ज़्यादा जानकारी के लिए, एचडीएमआई 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()
को कॉल करें. - आपके पास 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 सिग्नेचर स्कीम 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 इंटिग्रेशन
कीबोर्ड और अन्य आईएमई अब ड्रॉप-डाउन मेन्यू में दिखाने के बजाय, सुझाव वाली पट्टी या मिलते-जुलते इंटरफ़ेस में, लाइन में ही ऑटोमैटिक भरने के सुझाव दिखा सकते हैं. पासवर्ड और क्रेडिट कार्ड नंबर जैसी संवेदनशील जानकारी को सुरक्षित रखने के लिए, सुझाव उपयोगकर्ता को दिखाए जाते हैं. हालांकि, जब तक उपयोगकर्ता किसी सुझाव को नहीं चुनता, तब तक आईएमई को इसकी जानकारी नहीं होती. IME और Password Manager, इस सुविधा के साथ कैसे काम कर सकते हैं, इस बारे में जानने के लिए कीबोर्ड के साथ ऑटोमैटिक भरने की सुविधा को इंटिग्रेट करना लेख पढ़ें.
कॉन्टेंट कैप्चर सर्विस के साथ डेटा शेयर करना
Android 11 से, आपका ऐप्लिकेशन डिवाइस की कॉन्टेंट कैप्चर करने वाली सेवा के साथ डेटा शेयर कर सकता है. इस सुविधा की मदद से, डिवाइस को कॉन्टेक्स्ट के हिसाब से जानकारी देने में आसानी होती है. जैसे, उपयोगकर्ता के आस-पास चल रहे गाने का नाम दिखाना.
अपने ऐप्लिकेशन का डेटा, कॉन्टेंट कैप्चर करने की सेवा के लिए उपलब्ध कराने के लिए, ContentCaptureManager
के किसी इंस्टेंस पर shareData()
तरीके को कॉल करें. अगर सिस्टम, डेटा शेयर करने का अनुरोध स्वीकार करता है, तो आपके ऐप्लिकेशन को सिर्फ़ लिखने की अनुमति वाला फ़ाइल डिस्क्रिप्टर मिलता है. इसे कॉन्टेंट कैप्चर करने वाली सेवा के साथ शेयर किया जा सकता है.