Android 9 (एपीआई लेवल 28) में, उपयोगकर्ताओं और डेवलपर के लिए कई नई सुविधाएं और क्षमताएं जोड़ी गई हैं. इस दस्तावेज़ में, डेवलपर के लिए उपलब्ध नई सुविधाओं के बारे में बताया गया है.
नए एपीआई के बारे में जानने के लिए, एपीआई में हुए बदलाव की रिपोर्ट पढ़ें या Android API के बारे में जानकारी पर जाएं. साथ ही, Android 9 में हुए बदलावों के बारे में ज़रूर जानें. इससे आपको उन क्षेत्रों के बारे में पता चलेगा जहां प्लैटफ़ॉर्म में हुए बदलावों से आपके ऐप्लिकेशन पर असर पड़ सकता है.
वाई-फ़ाई आरटीटी की मदद से, घर के अंदर की जगह की जानकारी पाना
Android 9 में, IEEE 802.11-2016 वाई-फ़ाई प्रोटोकॉल के लिए प्लैटफ़ॉर्म सपोर्ट जोड़ा गया है. इसे वाई-फ़ाई राउंड-ट्रिप-टाइम (RTT) भी कहा जाता है. इससे आपको अपने ऐप्लिकेशन में, घर के अंदर डिवाइस की जगह की जानकारी का फ़ायदा मिलता है.
हार्डवेयर की सुविधा वाले Android 9 पर काम करने वाले डिवाइसों पर, आपके ऐप्लिकेशन आरटीटी एपीआई का इस्तेमाल कर सकते हैं. इससे, वे आस-पास के आरटीटी की सुविधा वाले वाई-फ़ाई ऐक्सेस पॉइंट (एपी) की दूरी का पता लगा सकते हैं. डिवाइस में, जगह की जानकारी की सेटिंग चालू होनी चाहिए. साथ ही, वाई-फ़ाई का पता लगाने की सुविधा चालू होनी चाहिए. यह सुविधा सेटिंग > जगह की जानकारी में जाकर चालू की जा सकती है. इसके अलावा, आपके ऐप्लिकेशन के पास ACCESS_FINE_LOCATION अनुमति होनी चाहिए. आरटीटी का इस्तेमाल करने के लिए, डिवाइस को ऐक्सेस पॉइंट से कनेक्ट करने की ज़रूरत नहीं होती.
निजता बनाए रखने के लिए, सिर्फ़ फ़ोन यह पता लगा सकता है कि ऐक्सेस पॉइंट कितनी दूर है. ऐक्सेस पॉइंट के पास यह जानकारी नहीं होती.
अगर आपका डिवाइस तीन या इससे ज़्यादा ऐक्सेस पॉइंट की दूरी मेज़र करता है, तो डिवाइस की उस पोज़िशन का अनुमान लगाने के लिए मल्टीलेटरेशन एल्गोरिदम का इस्तेमाल किया जा सकता है जो उन मेज़रमेंट के हिसाब से सबसे सही हो. आम तौर पर, नतीजे में एक से दो मीटर तक का अंतर हो सकता है.
इस सटीक जानकारी की मदद से, नए अनुभव बनाए जा सकते हैं. जैसे, बिल्डिंग के अंदर नेविगेशन और जगह के हिसाब से मिलने वाली बेहतर सेवाएं. जैसे, आवाज़ से कंट्रोल करने की सुविधा (उदाहरण के लिए, "यह लाइट चालू करो") और जगह के हिसाब से जानकारी (जैसे, "क्या इस प्रॉडक्ट के लिए कोई खास ऑफ़र उपलब्ध है?").
Android WifiRttScan डेमो ऐप्लिकेशन में, WiFi RTT API का इस्तेमाल देखें.
ज़्यादा जानकारी के लिए, वाई-फ़ाई की जगह की जानकारी: आरटीटी के साथ रेंजिंग लेख पढ़ें.
डिसप्ले कटआउट की सुविधा
एम्युलेटर का इस्तेमाल करके डिसप्ले कटआउट की जांच करना
Android 9 में, किनारे से किनारे तक फैली नई स्क्रीन के लिए सहायता मिलती है. इनमें कैमरे और स्पीकर के लिए डिसप्ले कटआउट होते हैं. DisplayCutout क्लास की मदद से, उन जगहों और आकृतियों का पता लगाया जा सकता है जहां कॉन्टेंट नहीं दिखाया जाना चाहिए. कटआउट वाले इन हिस्सों के मौजूद होने और उनकी जगह का पता लगाने के लिए, getDisplayCutout() तरीके का इस्तेमाल करें.
विंडो लेआउट का नया एट्रिब्यूट, layoutInDisplayCutoutMode, आपके ऐप्लिकेशन को डिवाइस के कटआउट के आस-पास कॉन्टेंट को लेआउट करने की अनुमति देता है. इस एट्रिब्यूट को इनमें से किसी एक वैल्यू पर सेट किया जा सकता है:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULTLAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGESLAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
Android 9 पर काम करने वाले किसी भी डिवाइस या एम्युलेटर पर, स्क्रीन कटआउट को इस तरह से सिम्युलेट किया जा सकता है:
- डेवलपर के लिए सेटिंग और टूल चालू करें.
- डेवलपर विकल्प स्क्रीन पर, नीचे की ओर स्क्रोल करके ड्राइंग सेक्शन पर जाएं. इसके बाद, कटआउट वाले डिसप्ले को सिम्युलेट करें को चुनें.
- कटआउट का साइज़ चुनें.
सूचनाएं
Android 9 में सूचनाओं से जुड़ी कई नई सुविधाएं जोड़ी गई हैं. ये सभी सुविधाएं, एपीआई लेवल 28 और उसके बाद के वर्शन को टारगेट करने वाले डेवलपर के लिए उपलब्ध हैं.
MessagingStyle में फ़ोटो अटैच की गई है.
MessagingStyle में जवाब और बातचीत की सुविधा.
सूचनाओं का इस्तेमाल करने वाले सैंपल कोड के लिए, People Sample देखें. इसमें Android 9 की सुविधाएं भी शामिल हैं.
मैसेजिंग की बेहतर सुविधा
Android 7.0 (एपीआई लेवल 24) से, सूचना में ही मैसेज का जवाब देने या कोई अन्य टेक्स्ट डालने की सुविधा जोड़ी गई थी. Android 9 में इस सुविधा को बेहतर बनाया गया है. इसमें ये सुधार किए गए हैं:
बातचीत में शामिल लोगों के लिए आसान सहायता:
Personक्लास का इस्तेमाल, बातचीत में शामिल लोगों की पहचान करने के लिए किया जाता है. इसमें उनके अवतार और यूआरआई शामिल हैं. कई अन्य एपीआई, जैसे किaddMessage(), अबCharSequenceके बजायPersonक्लास का इस्तेमाल करते हैं.Personक्लास, बिल्डर डिज़ाइन पैटर्न के साथ भी काम करती है.इमेज दिखाने की सुविधा: Android 9 में अब फ़ोन पर, मैसेजिंग की सूचनाओं में इमेज दिखती हैं. इमेज दिखाने के लिए, मैसेज में
setData()का इस्तेमाल किया जा सकता है. नीचे दिए गए कोड स्निपेट में,Personऔर इमेज वाला मैसेज बनाने का तरीका बताया गया है.
Kotlin
// Create new Person. val sender = Person() .setName(name) .setUri(uri) .setIcon(null) .build() // Create image message. val message = Message("Picture", time, sender) .setData("image/", imageUri) val style = Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message)
Java
// Create new Person. Person sender = new Person() .setName(name) .setUri(uri) .setIcon(null) .build(); // Create image message. Message message = new Message("Picture", time, sender) .setData("image/", imageUri); Notification.MessagingStyle style = new Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message);
जवाबों को ड्राफ़्ट के तौर पर सेव करना: जब कोई उपयोगकर्ता गलती से मैसेजिंग की सूचना बंद कर देता है, तो आपका ऐप्लिकेशन सिस्टम से भेजे गए
EXTRA_REMOTE_INPUT_DRAFTको वापस पा सकता है. इस एक्स्ट्रा का इस्तेमाल करके, ऐप्लिकेशन में टेक्स्ट फ़ील्ड को पहले से भरा जा सकता है, ताकि लोग अपना जवाब पूरा कर सकें.पहचानें कि कोई बातचीत ग्रुप बातचीत है या नहीं:
setGroupConversation()का इस्तेमाल करके, यह पता लगाया जा सकता है कि कोई बातचीत ग्रुप बातचीत है या नहीं.किसी इंटेंट के लिए सिमैंटिक ऐक्शन सेट करना:
setSemanticAction()तरीके से, किसी कार्रवाई को सिमैंटिक मतलब दिया जा सकता है. जैसे,"पढ़ा गया के तौर पर मार्क करें", "मिटाएं", "जवाब दें" वगैरह.स्मार्ट जवाब: Android 9 में, मैसेजिंग ऐप्लिकेशन में उपलब्ध जवाबों के सुझाव देने की सुविधा काम करती है. उपयोगकर्ता को जवाबों की एक सीरीज़ देने के लिए,
RemoteInput.setChoices()का इस्तेमाल करें.
चैनल की सेटिंग, ब्रॉडकास्ट, और 'परेशान न करें' मोड
Android 8.0 में सूचना चैनल की सुविधा जोड़ी गई है. इसकी मदद से, हर तरह की सूचना के लिए एक ऐसा चैनल बनाया जा सकता है जिसे उपयोगकर्ता अपनी पसंद के मुताबिक बना सकते हैं. Android 9 में, सूचना चैनल की सेटिंग को आसान बना दिया गया है. इसके लिए, ये बदलाव किए गए हैं:
चैनल ग्रुप ब्लॉक करना: अब उपयोगकर्ता, किसी ऐप्लिकेशन की सूचना सेटिंग में जाकर, चैनलों के पूरे ग्रुप को ब्लॉक कर सकते हैं.
isBlocked()तरीके का इस्तेमाल करके यह पता लगाया जा सकता है कि कोई ग्रुप कब ब्लॉक किया गया है. इससे उस ग्रुप के चैनलों के लिए कोई सूचना नहीं भेजी जाएगी.इसके अलावा, आपका ऐप्लिकेशन
getNotificationChannelGroup()नए तरीके का इस्तेमाल करके, चैनल ग्रुप की मौजूदा सेटिंग के बारे में क्वेरी कर सकता है.ब्रॉडकास्ट इंटेंट के नए टाइप: Android सिस्टम अब सूचना चैनल और चैनल ग्रुप की सूचनाएं ब्लॉक करने की स्थिति में बदलाव होने पर, ब्रॉडकास्ट इंटेंट भेजता है. जिस ऐप्लिकेशन के पास ब्लॉक किए गए चैनल या ग्रुप का मालिकाना हक है वह इन इंटेंट को सुन सकता है और उसके हिसाब से प्रतिक्रिया दे सकता है. इन इंटेंट ऐक्शन और एक्सट्रा के बारे में ज़्यादा जानने के लिए,
NotificationManagerरेफ़रंस में अपडेट की गई कॉन्स्टेंट की सूची देखें. ब्रॉडकास्ट इंटेंट पर प्रतिक्रिया देने के बारे में जानने के लिए, ब्रॉडकास्ट लेख पढ़ें.NotificationManager.Policyमें, 'परेशान न करें' मोड की तीन नई प्राथमिकताएं जोड़ी गई हैं:PRIORITY_CATEGORY_ALARMSअलार्म को प्राथमिकता देता है.PRIORITY_CATEGORY_MEDIAमीडिया सोर्स से आने वाली आवाज़ों को प्राथमिकता देता है. जैसे, मीडिया और बोलकर रास्ते की जानकारी पाने की सुविधा.PRIORITY_CATEGORY_SYSTEMसिस्टम की आवाज़ों को प्राथमिकता देता है.
NotificationManager.Policyमें, 'परेशान न करें' सुविधा के लिए सात नए कॉन्स्टेंट भी हैं. इनका इस्तेमाल करके, विज़ुअल इंटरप्शन को कम किया जा सकता है:SUPPRESSED_EFFECT_FULL_SCREEN_INTENTसूचना को फ़ुल-स्क्रीन पर लॉन्च होने से रोकता है.SUPPRESSED_EFFECT_LIGHTSसे सूचना की लाइट बंद हो जाती है.SUPPRESSED_EFFECT_PEEKइससे सूचनाएं कुछ समय के लिए स्क्रीन पर नहीं दिखती हैं ("पीकिंग").SUPPRESSED_EFFECT_STATUS_BARइस सेटिंग को चालू करने पर, स्टेटस बार की सुविधा वाले डिवाइसों पर सूचनाएं नहीं दिखती हैं.SUPPRESSED_EFFECT_BADGEबैज दिखाने की सुविधा वाले डिवाइसों पर बैज दिखाने की सुविधा को बंद करता है. ज़्यादा जानकारी के लिए, सूचना बैज में बदलाव करना लेख पढ़ें.SUPPRESSED_EFFECT_AMBIENTऐंबियंट डिसप्ले की सुविधा वाले डिवाइसों पर सूचनाएं ब्लॉक करता है.SUPPRESSED_EFFECT_NOTIFICATION_LISTसे, सूचनाएं उन डिवाइसों पर सूची के तौर पर नहीं दिखती हैं जिन पर सूची वाला व्यू दिखता है. जैसे, नोटिफ़िकेशन शेड या लॉकस्क्रीन.
एक से ज़्यादा कैमरे इस्तेमाल करने की सुविधा और कैमरे से जुड़े अपडेट
Android 9 पर काम करने वाले डिवाइसों पर, दो या उससे ज़्यादा फ़िज़िकल कैमरों से एक साथ स्ट्रीम ऐक्सेस की जा सकती हैं. जिन डिवाइसों में दो फ़्रंट कैमरे या दो बैक कैमरे होते हैं उनमें ऐसी नई सुविधाएं बनाई जा सकती हैं जो सिर्फ़ एक कैमरे से नहीं बनाई जा सकतीं. जैसे, बिना किसी रुकावट के ज़ूम करना, बोके इफ़ेक्ट, और स्टीरियो विज़न. इस एपीआई की मदद से, लॉजिकल या फ़्यूज़्ड कैमरा स्ट्रीम को भी कॉल किया जा सकता है. यह स्ट्रीम, दो या उससे ज़्यादा कैमरों के बीच अपने-आप स्विच होती है.
कैमरे में अन्य सुधार भी किए गए हैं. इनमें अतिरिक्त सेशन पैरामीटर शामिल हैं. इनसे शुरुआती कैप्चर के दौरान होने वाली देरी को कम करने में मदद मिलती है. साथ ही, इनसे कैमरा क्लाइंट को कैमरा स्ट्रीमिंग को रोके और शुरू किए बिना, अलग-अलग इस्तेमाल के उदाहरणों को हैंडल करने में मदद मिलती है. हमने डिसप्ले पर आधारित फ़्लैश की सुविधा और ऐप्लिकेशन लेवल पर इमेज को स्थिर करने और खास इफ़ेक्ट के लिए, ओआईएस टाइमस्टैंप ऐक्सेस करने से जुड़े एपीआई भी जोड़े हैं.
Android 9 में, मल्टी-कैमरा एपीआई, FULL या LIMITED की सुविधा वाले डिवाइसों के लिए मोनोक्रोम कैमरों के साथ काम करता है.
मोनोक्रोम आउटपुट, YUV_420_888 फ़ॉर्मैट के ज़रिए मिलता है. इसमें Y को ग्रेस्केल, U (Cb) को 128, और V (Cr) को 128 के तौर पर दिखाया जाता है.
Android 9 में, यूएसबी/यूवीसी वाले बाहरी कैमरों को इस्तेमाल करने की सुविधा भी दी गई है. हालांकि, यह सुविधा सिर्फ़ उन डिवाइसों पर काम करती है जिन पर Android 9 काम करता है.
ड्रॉएबल और बिटमैप के लिए ImageDecoder
Android 9 में ImageDecoder क्लास को पेश किया गया है. यह क्लास, इमेज को डिकोड करने का नया तरीका उपलब्ध कराती है. BitmapFactory और BitmapFactory.Options एपीआई के बजाय, इस क्लास का इस्तेमाल करें.
ImageDecoder की मदद से, बाइट बफ़र, फ़ाइल या यूआरआई से Drawable या Bitmap बनाया जा सकता है. किसी इमेज को डिकोड करने के लिए, सबसे पहले एन्कोड की गई इमेज के सोर्स के साथ createSource() को कॉल करें. इसके बाद, decodeDrawable()
या decodeBitmap()
को कॉल करें. इसके लिए, ImageDecoder.Source
ऑब्जेक्ट को पास करके Drawable
या Bitmap बनाएं. डिफ़ॉल्ट सेटिंग बदलने के लिए, decodeDrawable() या decodeBitmap() को OnHeaderDecodedListener पास करें. ImageDecoder कॉल
onHeaderDecoded()
इमेज की डिफ़ॉल्ट चौड़ाई और ऊंचाई के साथ, एक बार जब वे जान जाते हैं.
अगर कोड की गई इमेज, ऐनिमेट किया गया GIF या WebP है, तो decodeDrawable(), Drawable दिखाता है. यह AnimatedImageDrawable क्लास का इंस्टेंस होता है.
इमेज प्रॉपर्टी सेट करने के लिए, अलग-अलग तरीकों का इस्तेमाल किया जा सकता है:
- डिकोड की गई इमेज को सटीक साइज़ में बदलने के लिए, टारगेट डाइमेंशन को
setTargetSize()में पास करें. सैंपल साइज़ का इस्तेमाल करके भी इमेज को स्केल किया जा सकता है. सैंपल साइज़ को सीधेsetTargetSampleSize()पर पास करें. - स्केल की गई इमेज की रेंज में किसी इमेज को काटने के लिए,
setCrop()को कॉल करें. - बदले जा सकने वाले बिटमैप को बनाने के लिए,
trueकोsetMutableRequired()में पास करें.
ImageDecoder की मदद से, किसी इमेज में अपनी पसंद के मुताबिक और मुश्किल इफ़ेक्ट भी जोड़े जा सकते हैं. जैसे, गोल कोने या सर्कल मास्क. ड्रॉइंग से जुड़े निर्देशों को लागू करने के लिए, PostProcessor क्लास के इंस्टेंस के साथ setPostProcessor() का इस्तेमाल करें.
ऐनिमेशन
Android 9 में, GIF और WebP फ़ॉर्मैट की ऐनिमेट की गई इमेज को दिखाने और बनाने के लिए, AnimatedImageDrawable क्लास पेश की गई है.
AnimatedImageDrawable, AnimatedVectorDrawable की तरह ही काम करता है. ऐसा इसलिए, क्योंकि रेंडर थ्रेड, AnimatedImageDrawable के ऐनिमेशन को ड्राइव करता है.
रेंडर थ्रेड, डिकोड करने के लिए वर्कर थ्रेड का भी इस्तेमाल करती है, ताकि डिकोडिंग, रेंडर थ्रेड पर होने वाले अन्य ऑपरेशनों में रुकावट न डाले. इस सुविधा को लागू करने पर, आपका ऐप्लिकेशन ऐनिमेटेड इमेज दिखा सकता है. इसके लिए, उसे इमेज के अपडेट मैनेज करने या आपके ऐप्लिकेशन की यूज़र इंटरफ़ेस (यूआई) थ्रेड पर अन्य इवेंट में दख़ल देने की ज़रूरत नहीं होती.
ImageDecoder के इंस्टेंस का इस्तेमाल करके, AnimatedImageDrawable को डिकोड किया जा सकता है. यहां दिए गए कोड स्निपेट में, ImageDecoder का इस्तेमाल करके AnimatedImageDrawable को डिकोड करने का तरीका बताया गया है:
Kotlin
@Throws(IOException::class) private fun decodeImage() { val decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(resources, R.drawable.my_drawable)) // Prior to start(), the first frame is displayed. (decodedAnimation as? AnimatedImageDrawable)?.start() }
Java
private void decodeImage() throws IOException {
Drawable decodedAnimation = ImageDecoder.decodeDrawable(
ImageDecoder.createSource(getResources(), R.drawable.my_drawable));
if (decodedAnimation instanceof AnimatedImageDrawable) {
// Prior to start(), the first frame is displayed.
((AnimatedImageDrawable) decodedAnimation).start();
}
}ImageDecoder में कई ऐसे तरीके हैं जिनकी मदद से, इमेज में और बदलाव किए जा सकते हैं.
उदाहरण के लिए, इमेज के दिखने की स्टाइल में बदलाव करने के लिए, setPostProcessor() तरीके का इस्तेमाल किया जा सकता है. जैसे, सर्कल मास्क या गोल कोने लागू करना.
एचडीआर VP9 वीडियो, HEIF इमेज कंप्रेशन, और मीडिया एपीआई
Android 9 में, हाई डाइनैमिक रेंज (एचडीआर) VP9 प्रोफ़ाइल 2 के लिए पहले से ही सपोर्ट मौजूद है. इसलिए, एचडीआर की सुविधा वाले डिवाइसों पर, YouTube, Play Movies, और अन्य सोर्स से एचडीआर की सुविधा वाली फ़िल्में अपने उपयोगकर्ताओं को उपलब्ध कराई जा सकती हैं.
Android 9 में, हाई एफ़िशियंसी इमेज फ़ाइल फ़ॉर्मैट (HEIF या HEIC) का इस्तेमाल करके इमेज को एन्कोड करने की सुविधा भी जोड़ी गई है. इससे इमेज को कंप्रेस करने में मदद मिलती है. साथ ही, स्टोरेज स्पेस और नेटवर्क डेटा का इस्तेमाल कम होता है. HEIF फ़ॉर्मैट वाली स्टिल इमेज के सैंपल, MediaMuxer और MediaExtractor क्लास में इस्तेमाल किए जा सकते हैं. Android 9 पर काम करने वाले डिवाइसों पर प्लैटफ़ॉर्म की सुविधा उपलब्ध होने की वजह से, बैकएंड सर्वर से HEIF इमेज भेजना और उनका इस्तेमाल करना आसान है. यह पक्का करने के बाद कि आपका ऐप्लिकेशन, शेयर करने और दिखाने के लिए इस डेटा फ़ॉर्मैट के साथ काम करता है, अपने ऐप्लिकेशन में इमेज सेव करने के फ़ॉर्मैट के तौर पर HEIF का इस्तेमाल करके देखें. ImageDecoder या BitmapFactory का इस्तेमाल करके, jpeg को heic में बदला जा सकता है. BitmapFactory, JPEG फ़ाइल से बिटमैप हासिल करता है. इसके बाद, YUV बाइट बफ़र या Surface या Bitmap के इंस्टेंस से HEIF फ़ॉर्मैट की इमेज लिखने के लिए, HeifWriter का इस्तेमाल किया जा सकता है.
मीडिया मेट्रिक, AudioTrack, AudioRecord, और MediaDrm क्लास से भी उपलब्ध होती हैं.
Android 9, MediaDRM क्लास के लिए मेट्रिक, एचडीसीपी लेवल, सुरक्षा लेवल, और सेशन की संख्या पाने के तरीके उपलब्ध कराता है. साथ ही, सुरक्षा लेवल और सुरक्षित स्टॉप पर ज़्यादा कंट्रोल पाने के तरीके भी उपलब्ध कराता है. ज़्यादा जानकारी के लिए, एपीआई में हुए बदलाव की रिपोर्ट देखें.
Android 9 में, AAudio API में AAudioStream के कई अन्य एट्रिब्यूट के लिए सहायता जोड़ी गई है. इनमें इस्तेमाल, कॉन्टेंट टाइप, और इनपुट प्रीसेट शामिल हैं. इन एट्रिब्यूट का इस्तेमाल करके, ऐसी स्ट्रीम बनाई जा सकती हैं जो VoIP या कैमकोर्डर ऐप्लिकेशन के लिए ट्यून की गई हों. सेशन आईडी को सेट करके, AAudio स्ट्रीम को ऐसे सबमिक्स से भी जोड़ा जा सकता है जिसमें इफ़ेक्ट शामिल किए जा सकते हैं. इफ़ेक्ट को कंट्रोल करने के लिए, AudioEffect एपीआई का इस्तेमाल करें.
Android 9 में, डाइनैमिक प्रोसेसिंग के लिए AudioEffect एपीआई लॉन्च किया गया है.
इस क्लास की मदद से, अलग-अलग स्टेज पर चैनल के हिसाब से ऑडियो इफ़ेक्ट बनाए जा सकते हैं. जैसे, इक्वलाइज़ेशन, मल्टी-बैंड कंप्रेशन, और लिमिटर. बैंड और ऐक्टिव स्टेज की संख्या को कॉन्फ़िगर किया जा सकता है. साथ ही, ज़्यादातर पैरामीटर को रीयल टाइम में कंट्रोल किया जा सकता है.
JobScheduler में डेटा के इस्तेमाल को लेकर संवेदनशीलता
Android 9 से, JobScheduler, नेटवर्क से जुड़े कामों को बेहतर तरीके से मैनेज करने के लिए, कैरियर से मिले नेटवर्क स्टेटस सिग्नल का इस्तेमाल कर सकता है.
जॉब, डेटा के अनुमानित साइज़, सिग्नल प्रीफ़ेचिंग की सुविधा, और नेटवर्क से जुड़ी ज़रूरी शर्तों के बारे में जानकारी दे सकते हैं. JobScheduler इसके बाद, नेटवर्क के स्टेटस के हिसाब से काम करता है. उदाहरण के लिए, जब नेटवर्क यह सिग्नल देता है कि वह व्यस्त है, तो JobScheduler नेटवर्क से जुड़े बड़े अनुरोधों को कुछ समय के लिए रोक सकता है. अनमीटर्ड नेटवर्क पर, JobScheduler प्रीफ़ेचिंग की प्रोसेस चला सकता है, ताकि उपयोगकर्ता अनुभव को बेहतर बनाया जा सके. जैसे, हेडलाइन को प्रीफ़ेच करके.
काम जोड़ते समय, setEstimatedNetworkBytes(), setPrefetch(), और setRequiredNetwork() का इस्तेमाल करें. इससे JobScheduler को काम को सही तरीके से मैनेज करने में मदद मिलेगी. जब आपका काम पूरा हो जाए, तब JobParameters.getNetwork() से मिले Network ऑब्जेक्ट का इस्तेमाल करें.
ऐसा न करने पर, डिवाइस के डिफ़ॉल्ट नेटवर्क का इस्तेमाल किया जाएगा. यह नेटवर्क आपकी ज़रूरतों के मुताबिक न हो सकता है. इससे अनचाहे तरीके से डेटा का इस्तेमाल हो सकता है.
Neural Networks API 1.1
Neural Networks API को Android 8.1 (एपीआई लेवल 27) में पेश किया गया था. इसका मकसद, Android डिवाइस पर मशीन लर्निंग की प्रोसेस को तेज़ करना था. Android 9 में एपीआई को बेहतर बनाया गया है और इसका दायरा बढ़ाया गया है. इसमें नौ नए ऑपरेशन के लिए सहायता जोड़ी गई है:
- हर एलिमेंट के हिसाब से गणितीय कार्रवाइयां:
- ऐरे से जुड़ी कार्रवाइयां:
पहले से मौजूद समस्या: Android 9 और इसके बाद के वर्शन पर उपलब्ध ANEURALNETWORKS_PAD ऑपरेशन में ANEURALNETWORKS_TENSOR_QUANT8_ASYMM टेंसर पास करने पर, ऐसा हो सकता है कि NNAPI से मिला आउटपुट, मशीन लर्निंग के ज़्यादा लेवल वाले फ़्रेमवर्क से मिले आउटपुट से मेल न खाए. जैसे, TensorFlow लाइट. समस्या हल होने तक, आपको सिर्फ़
ANEURALNETWORKS_TENSOR_FLOAT32
पास करना चाहिए.
इसके अलावा, एपीआई में एक नया फ़ंक्शन भी जोड़ा गया है, ANeuralNetworksModel_relaxComputationFloat32toFloat16(). इसकी मदद से, यह तय किया जा सकता है कि ANEURALNETWORKS_TENSOR_FLOAT32 की गणना, रेंज और सटीक वैल्यू के साथ की जाए या नहीं. यह रेंज और सटीक वैल्यू, IEEE 754 16-बिट फ़्लोटिंग-पॉइंट फ़ॉर्मैट की तरह कम होती है.
ऑटोमैटिक तरीके से जानकारी भरने की सुविधा देने वाला फ़्रेमवर्क
Android 9 में कई ऐसे सुधार किए गए हैं जिन्हें अपने-आप भरने की सुविधा देने वाली सेवाएं लागू कर सकती हैं. इससे फ़ॉर्म भरते समय, लोगों को बेहतर अनुभव मिलता है. अपने ऐप्लिकेशन में ऑटोमैटिक भरने की सुविधाओं का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, ऑटोमैटिक भरने की सुविधा देने वाले फ़्रेमवर्क की गाइड देखें.
सुरक्षा से जुड़ी बेहतर सुविधाएं
Android 9 में सुरक्षा से जुड़ी कई सुविधाएं जोड़ी गई हैं. इनके बारे में यहां बताया गया है:
Android की ओर से सुरक्षा की पुष्टि
Android 9 या इसके बाद के वर्शन पर काम करने वाले डिवाइसों पर, Android Protected Confirmation की सुविधा इस्तेमाल की जा सकती है. इस वर्कफ़्लो का इस्तेमाल करने पर, आपका ऐप्लिकेशन उपयोगकर्ता को एक प्रॉम्प्ट दिखाता है. इसमें उपयोगकर्ता से एक छोटे स्टेटमेंट को स्वीकार करने के लिए कहा जाता है. इस स्टेटमेंट से ऐप्लिकेशन को यह पुष्टि करने की अनुमति मिलती है कि उपयोगकर्ता, संवेदनशील लेन-देन पूरा करना चाहता है. जैसे, पेमेंट करना.
अगर उपयोगकर्ता इस स्टेटमेंट को स्वीकार करता है, तो Android Keystore को एक क्रिप्टोग्राफ़िक हस्ताक्षर मिलता है. यह हस्ताक्षर, कीड-हैश मैसेज ऑथेंटिकेशन कोड (एचएमएसी) से सुरक्षित होता है. Android Keystore इस हस्ताक्षर को सेव करता है. Android Keystore से पुष्टि होने के बाद, आपका ऐप्लिकेशन trustedConfirmationRequired से जनरेट किए गए पासकोड का इस्तेमाल कर सकता है. इसके लिए, उसे भरोसेमंद एक्ज़ीक्यूशन एनवायरमेंट (टीईई) में जाकर, उस मैसेज पर हस्ताक्षर करने होंगे जिसे उपयोगकर्ता ने स्वीकार किया है. इस सिग्नेचर से यह पता चलता है कि उपयोगकर्ता ने स्टेटमेंट पढ़ लिया है और वह इससे सहमत है.
चेतावनी: Android Protected Confirmation, उपयोगकर्ता के लिए जानकारी का सुरक्षित चैनल उपलब्ध नहीं कराता. आपका ऐप्लिकेशन, Android प्लैटफ़ॉर्म की ओर से दी जाने वाली गारंटी के अलावा, किसी भी तरह की निजता की गारंटी नहीं दे सकता. खास तौर पर, इस वर्कफ़्लो का इस्तेमाल ऐसी संवेदनशील जानकारी दिखाने के लिए न करें जिसे आम तौर पर उपयोगकर्ता के डिवाइस पर नहीं दिखाया जाता.
Android Protected Confirmation के लिए सहायता जोड़ने से जुड़ी जानकारी पाने के लिए, Android Protected Confirmation गाइड देखें.
बायोमेट्रिक ऑथेंटिकेशन का यूनीफ़ाइड डायलॉग
Android 9 में, सिस्टम आपके ऐप्लिकेशन की ओर से बायोमेट्रिक पुष्टि वाले डायलॉग उपलब्ध कराता है. इस सुविधा से, डायलॉग का लुक, फ़ील, और प्लेसमेंट स्टैंडर्ड हो जाता है. इससे लोगों को ज़्यादा भरोसा होता है कि वे बायोमेट्रिक क्रेडेंशियल की पुष्टि करने वाले भरोसेमंद सिस्टम के ज़रिए पुष्टि कर रहे हैं.
अगर आपका ऐप्लिकेशन, उपयोगकर्ताओं को फ़िंगरप्रिंट की मदद से पुष्टि करने वाला डायलॉग बॉक्स दिखाने के लिए FingerprintManager का इस्तेमाल करता है, तो इसके बजाय BiometricPrompt का इस्तेमाल करें. BiometricPrompt, पुष्टि करने का डायलॉग दिखाने के लिए सिस्टम पर निर्भर करता है. यह उपयोगकर्ता के चुने गए बायोमेट्रिक ऑथेंटिकेशन के हिसाब से भी काम करता है.
हार्डवेयर सुरक्षा मॉड्यूल
Android 9 या इसके बाद के वर्शन पर काम करने वाले डिवाइसों में, StrongBox KeyMint (पहले इसे Keymaster कहा जाता था) इंस्टॉल किया जा सकता है. यह KeyMint (पहले इसे Keymaster कहा जाता था) एचएएल का एक ऐसा वर्शन है जो हार्डवेयर सुरक्षा मॉड्यूल में मौजूद होता है. इस मॉड्यूल में ये शामिल हैं:
- इसका अपना सीपीयू होता है.
- सुरक्षित स्टोरेज.
- यह एक ऐसा जनरेटर है जो बिना किसी क्रम के नंबर जनरेट करता है.
- ऐप्लिकेशन के पैकेज में छेड़छाड़ और बिना अनुमति के ऐप्लिकेशन को साइडलोड करने से रोकने के लिए अतिरिक्त तरीके.
StrongBox KeyMint में सेव की गई कुंजियों की जांच करते समय, सिस्टम ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट (टीईई) के साथ कुंजी की पुष्टि करता है.
StrongBox KeyMint का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, हार्डवेयर सुरक्षा मॉड्यूल देखें.
कीस्टोर में पासकोड को सुरक्षित तरीके से इंपोर्ट करना
Android 9, एन्क्रिप्ट (सुरक्षित) की गई कुंजियों को डिक्रिप्ट करने के लिए अतिरिक्त सुरक्षा उपलब्ध कराता है. इसके लिए, यह ASN.1‑encoded कुंजी फ़ॉर्मैट का इस्तेमाल करके, एन्क्रिप्ट (सुरक्षित) की गई कुंजियों को Keystore में सुरक्षित तरीके से इंपोर्ट करने की सुविधा जोड़ता है. इसके बाद, KeyMint, Keystore में मौजूद कुंजियों को डिक्रिप्ट करता है. इसलिए, कुंजियों का कॉन्टेंट कभी भी डिवाइस की होस्ट मेमोरी में सादे टेक्स्ट के तौर पर नहीं दिखता.
एन्क्रिप्ट (सुरक्षित) की गई कुंजियों को ज़्यादा सुरक्षित तरीके से इंपोर्ट करने के बारे में ज़्यादा जानें.
डेटा सुरक्षित करने वाली कुंजी का नया वर्शन बनाने के साथ APK हस्ताक्षर करने की स्कीम
Android 9 में, APK सिग्नेचर स्कीम v3 के लिए सहायता जोड़ी गई है. इस स्कीम में, हर हस्ताक्षर करने वाले सर्टिफ़िकेट के लिए, हस्ताक्षर करने वाले ब्लॉक में रोटेशन के सबूत का रिकॉर्ड शामिल करने का विकल्प होता है. इस सुविधा की मदद से, आपके ऐप्लिकेशन पर नए साइनिंग सर्टिफ़िकेट से हस्ताक्षर किए जा सकते हैं. इसके लिए, APK फ़ाइल के पुराने साइनिंग सर्टिफ़िकेट को उस सर्टिफ़िकेट से लिंक किया जाता है जिससे अब उस पर हस्ताक्षर किए गए हैं.
apksigner का इस्तेमाल करके कुंजियां रोटेट करने के तरीके के बारे में ज़्यादा जानें.
सिर्फ़ अनलॉक किए गए डिवाइसों पर कुंजी को डिक्रिप्ट करने की अनुमति देने का विकल्प
Android 9 में unlockedDeviceRequired फ़्लैग की सुविधा जोड़ी गई है. इस विकल्प से यह तय होता है कि Keystore को स्क्रीन अनलॉक करने की ज़रूरत है या नहीं. ऐसा इसलिए, ताकि तय की गई कुंजी का इस्तेमाल करके, फ़्लाइट में मौजूद या सेव किए गए किसी भी डेटा को डिक्रिप्ट करने की अनुमति दी जा सके. इस तरह की कुंजियां, डिस्क पर सेव किए जाने वाले संवेदनशील डेटा को एन्क्रिप्ट (सुरक्षित) करने के लिए सबसे सही होती हैं. जैसे, स्वास्थ्य या एंटरप्राइज़ का डेटा. इस फ़्लैग से उपयोगकर्ताओं को यह भरोसा मिलता है कि डिवाइस लॉक होने पर डेटा को डिक्रिप्ट नहीं किया जा सकता. ऐसा तब होता है, जब उनका फ़ोन खो जाता है या चोरी हो जाता है.
डिवाइस लॉक होने पर, कुंजी को डिक्रिप्ट होने से बचाने के लिए, setUnlockedDeviceRequired() तरीके में true पास करके फ़्लैग चालू करें. यह चरण पूरा होने के बाद, जब उपयोगकर्ता की स्क्रीन लॉक हो जाती है, तो इस कुंजी का इस्तेमाल करके डेटा को डिक्रिप्ट या साइन करने के सभी अनुरोध पूरे नहीं किए जा सकते. लॉक किए गए डिवाइस को ऐक्सेस करने से पहले, पिन, पासवर्ड, फ़िंगरप्रिंट या किसी अन्य भरोसेमंद तरीके से पुष्टि करना ज़रूरी होता है.
लेगसी एन्क्रिप्शन की सुविधा
Android 9 वाले ऐसे डिवाइस जिनमें Keymaster 4 की सुविधा होती है उनमें ट्रिपल डेटा एन्क्रिप्शन एल्गोरिदम या ट्रिपल DES काम करता है. अगर आपका ऐप्लिकेशन, लेगसी सिस्टम के साथ काम करता है और इसके लिए Triple DES की ज़रूरत होती है, तो संवेदनशील क्रेडेंशियल को एन्क्रिप्ट (सुरक्षित) करते समय इस तरह के सिफ़र का इस्तेमाल करें.
अपने ऐप्लिकेशन को ज़्यादा सुरक्षित बनाने के तरीके के बारे में ज़्यादा जानने के लिए, Android डेवलपर के लिए सुरक्षा देखें.
डब्ल्यूपीएस के इस्तेमाल पर रोक
सुरक्षा से जुड़ी वजहों से, Wi-Fi Protected Setup (WPS) का इस्तेमाल बंद कर दिया गया है.
Android बैकअप
Android 9 में, बैकअप और रीस्टोर करने से जुड़ी नई सुविधाएं और डेवलपर विकल्प जोड़े गए हैं. इन बदलावों के बारे में जानकारी, यहां दी गई है.
क्लाइंट-साइड एन्क्रिप्शन का इस्तेमाल करके बनाए गए बैकअप
Android 9 में, क्लाइंट-साइड सीक्रेट का इस्तेमाल करके Android बैकअप को एन्क्रिप्ट (सुरक्षित) करने की सुविधा जोड़ी गई है. ये शर्तें पूरी होने पर, यह सुविधा अपने-आप चालू हो जाती है:
- उपयोगकर्ता ने Android 9 या इसके बाद के वर्शन का इस्तेमाल करके, बैकअप लेने की सुविधा चालू की हो.
- उपयोगकर्ता ने अपने डिवाइस के लिए स्क्रीन लॉक सेट किया हो. इसे अनलॉक करने के लिए, पिन, पैटर्न या पासवर्ड की ज़रूरत होती है.
निजता बनाए रखने के लिए यह सुविधा चालू होने पर, उपयोगकर्ता के डिवाइस से बनाए गए बैकअप से डेटा वापस लाने के लिए, डिवाइस के पिन, पैटर्न या पासवर्ड की ज़रूरत होती है. इस सुविधा के पीछे काम करने वाली टेक्नोलॉजी के बारे में ज़्यादा जानने के लिए, Google Cloud Key Vault Service का व्हाइट पेपर पढ़ें.
बैकअप के लिए ज़रूरी डिवाइस की शर्तें तय करना
अगर आपके ऐप्लिकेशन के डेटा में संवेदनशील जानकारी या प्राथमिकताएं शामिल हैं, तो Android 9 आपको डिवाइस की ऐसी शर्तें तय करने की सुविधा देता है जिनके तहत, आपके ऐप्लिकेशन का डेटा उपयोगकर्ता के बैकअप में शामिल किया जाता है. जैसे, जब क्लाइंट-साइड एन्क्रिप्शन चालू हो या एक डिवाइस से दूसरे डिवाइस पर डेटा ट्रांसफ़र किया जा रहा हो.
Android डिवाइसों पर डेटा का बैक अप लेने के बारे में ज़्यादा जानने के लिए, डेटा के बैकअप की खास जानकारी लेख पढ़ें.
सुलभता
Android 9 में, ऐक्सेसिबिलिटी फ़्रेमवर्क को बेहतर बनाया गया है. इससे, आपके ऐप्लिकेशन के उपयोगकर्ताओं को और भी बेहतर अनुभव देने में आसानी होती है.
नेविगेशन सिमैंटिक्स
Android 9 में जोड़े गए एट्रिब्यूट की मदद से, यह तय करना आसान हो जाता है कि सुलभता सेवाएं, खास तौर पर स्क्रीन रीडर, स्क्रीन के एक हिस्से से दूसरे हिस्से पर कैसे नेविगेट करें. इन एट्रिब्यूट से, दृष्टिबाधित लोगों को आपके ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) में मौजूद टेक्स्ट को तेज़ी से पढ़ने में मदद मिलती है. साथ ही, वे कोई विकल्प चुन पाते हैं.
उदाहरण के लिए, किसी शॉपिंग ऐप्लिकेशन में स्क्रीन रीडर, लोगों को एक कैटगरी की डील से सीधे दूसरी कैटगरी की डील पर जाने में मदद कर सकता है. इसके लिए, स्क्रीन रीडर को एक कैटगरी के सभी आइटम पढ़ने की ज़रूरत नहीं होती.
सुलभता पैनल के टाइटल
Android 8.1 (एपीआई लेवल 27) और इससे पुराने वर्शन में, सुलभता सेवाएं हमेशा यह पता नहीं लगा सकती हैं कि स्क्रीन का कोई खास हिस्सा कब अपडेट किया गया था. जैसे, जब कोई गतिविधि एक फ़्रैगमेंट को दूसरे फ़्रैगमेंट से बदलती है. पेन में, लॉजिक के हिसाब से ग्रुप किए गए और विज़ुअल तौर पर मिलते-जुलते यूज़र इंटरफ़ेस (यूआई) एलिमेंट होते हैं. आम तौर पर, इनमें एक फ़्रैगमेंट शामिल होता है.
Android 9 में, इन पैनल के लिए सुलभता पैनल के टाइटल दिए जा सकते हैं. इसके अलावा, अलग-अलग पहचान किए जा सकने वाले टाइटल भी दिए जा सकते हैं. अगर किसी पैनल में सुलभता पैनल का टाइटल है, तो पैनल बदलने पर सुलभता सेवाओं को ज़्यादा जानकारी मिलती है. इस सुविधा की मदद से, सेवाएं उपयोगकर्ता को यूज़र इंटरफ़ेस (यूआई) में हुए बदलावों के बारे में ज़्यादा जानकारी दे सकती हैं.
किसी पैन का टाइटल तय करने के लिए, android:accessibilityPaneTitle एट्रिब्यूट का इस्तेमाल करें. setAccessibilityPaneTitle() का इस्तेमाल करके, रनटाइम में बदले गए यूज़र इंटरफ़ेस (यूआई) पैन के टाइटल को भी अपडेट किया जा सकता है.
उदाहरण के लिए, Fragment ऑब्जेक्ट के कॉन्टेंट एरिया के लिए टाइटल दिया जा सकता है.
हेडिंग के आधार पर नेविगेशन
अगर आपके ऐप्लिकेशन में ऐसा टेक्स्ट वाला कॉन्टेंट दिखता है जिसमें लॉजिकल हेडिंग शामिल हैं, तो उन हेडिंग को दिखाने वाले View के इंस्टेंस के लिए, android:accessibilityHeading एट्रिब्यूट को true पर सेट करें. इन हेडिंग को जोड़ने से, ऐक्सेसिबिलिटी सेवाएं उपयोगकर्ताओं को एक हेडिंग से दूसरी हेडिंग पर सीधे तौर पर नेविगेट करने में मदद कर सकती हैं. सुलभता से जुड़ी कोई भी सेवा, इस सुविधा का इस्तेमाल करके लोगों को यूज़र इंटरफ़ेस (यूआई) नेविगेशन का बेहतर अनुभव दे सकती है.
ग्रुप नेविगेशन और आउटपुट
स्क्रीन रीडर, android:focusable एट्रिब्यूट का इस्तेमाल करते हैं. इससे उन्हें यह तय करने में मदद मिलती है कि उन्हें ViewGroup या View ऑब्जेक्ट के कलेक्शन को एक यूनिट के तौर पर कब पढ़ना चाहिए. इससे लोगों को यह समझने में मदद मिलेगी कि व्यू, एक-दूसरे से तार्किक रूप से जुड़े हुए हैं.
Android 8.1 और इससे पहले के वर्शन में, आपको ViewGroup में मौजूद हर View ऑब्जेक्ट को फ़ोकस न किए जा सकने वाले ऑब्जेक्ट के तौर पर मार्क करना होगा. साथ ही, ViewGroup को फ़ोकस किए जा सकने वाले ऑब्जेक्ट के तौर पर मार्क करना होगा. इस व्यवस्था की वजह से, कुछ मामलों में View को इस तरह से फ़ोकस करने लायक़ मार्क किया गया कि कीबोर्ड से नेविगेट करना ज़्यादा मुश्किल हो गया.
Android 9 से, android:focusable एट्रिब्यूट की जगह android:screenReaderFocusable एट्रिब्यूट का इस्तेमाल किया जा सकता है. ऐसा उन स्थितियों में किया जा सकता है जहां View ऑब्जेक्ट को फ़ोकस करने लायक बनाने से अनचाहे नतीजे मिलते हैं. स्क्रीन रीडर, उन सभी एलिमेंट पर फ़ोकस करते हैं जिनके लिए android:screenReaderFocusable या android:focusable को true पर सेट किया गया है.
आसानी से की जा सकने वाली कार्रवाइयां
Android 9 में, उपयोगकर्ताओं की ओर से सुविधा के लिए कार्रवाइयां करने की सुविधा जोड़ी गई है:
- टूलटिप के साथ इंटरैक्शन
- सुलभता फ़्रेमवर्क में जोड़ी गई सुविधाओं की मदद से, आपको किसी ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) में टूलटिप ऐक्सेस करने की सुविधा मिलती है. टूलटिप का टेक्स्ट पढ़ने के लिए,
getTooltipText()का इस्तेमाल करें. साथ ही,ACTION_SHOW_TOOLTIPऔरACTION_HIDE_TOOLTIPका इस्तेमाल करके,Viewके इंस्टेंस को टूलटिप दिखाने या छिपाने के लिए निर्देश दें. - ग्लोबल ऐक्शन जोड़े गए
- Android 9 में,
AccessibilityServiceक्लास में दो और डिवाइस ऐक्शन के लिए सहायता जोड़ी गई है. आपकी सेवा, उपयोगकर्ताओं कोGLOBAL_ACTION_LOCK_SCREENऔरGLOBAL_ACTION_TAKE_SCREENSHOTकार्रवाइयों का इस्तेमाल करके, अपने डिवाइसों को लॉक करने और स्क्रीनशॉट लेने में मदद कर सकती है.
विंडो में हुए बदलाव की जानकारी
Android 9 में, किसी ऐप्लिकेशन के एक साथ कई विंडो फिर से रेंडर करने पर, ऐप्लिकेशन की विंडो के अपडेट को ट्रैक करना आसान हो जाता है. जब कोई TYPE_WINDOWS_CHANGED इवेंट होता है, तब getWindowChanges() एपीआई का इस्तेमाल करके यह पता लगाएं कि विंडो में क्या बदलाव हुए हैं. मल्टीविंडो अपडेट के दौरान, हर विंडो इवेंट का अपना सेट जनरेट करती है.
getSource()
मेथड, हर इवेंट से जुड़ी विंडो का रूट व्यू दिखाता है.
अगर किसी ऐप्लिकेशन ने अपने View ऑब्जेक्ट के लिए सुलभता पैनल के टाइटल तय किए हैं, तो आपकी सेवा यह पहचान सकती है कि ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) कब अपडेट किया गया है. जब कोई
TYPE_WINDOW_STATE_CHANGED
इवेंट होता है, तब getContentChangeTypes()
से मिले टाइप का इस्तेमाल करके यह पता लगाएं कि विंडो में क्या बदलाव हुआ है. उदाहरण के लिए, फ़्रेमवर्क यह पता लगा सकता है कि किसी पैनल का नया टाइटल कब है या कोई पैनल कब गायब हो गया है.
घुमाव
अनचाहे रोटेशन को रोकने के लिए, हमने एक ऐसा मोड जोड़ा है जो डिवाइस की पोज़िशन बदलने पर भी, स्क्रीन को मौजूदा ओरिएंटेशन में पिन कर देता है. उपयोगकर्ता, सिस्टम बार में मौजूद बटन को दबाकर, स्क्रीन को मैन्युअल तरीके से घुमा सकते हैं.
ज़्यादातर मामलों में, ऐप्लिकेशन पर कंपैटिबिलिटी का असर कम पड़ता है. हालांकि, अगर आपके ऐप्लिकेशन में रोटेशन के लिए कोई कस्टम सेटिंग इस्तेमाल की गई है या स्क्रीन ओरिएंटेशन की कोई असामान्य सेटिंग इस्तेमाल की गई है, तो आपको ऐसी समस्याएं आ सकती हैं जिन पर पहले ध्यान नहीं दिया गया था. ऐसा तब होता है, जब उपयोगकर्ता के रोटेशन की प्राथमिकता हमेशा पोर्ट्रेट पर सेट होती है. हमारा सुझाव है कि आप अपने ऐप्लिकेशन की सभी मुख्य गतिविधियों में रोटेशन के व्यवहार पर एक नज़र डालें. साथ ही, पक्का करें कि स्क्रीन ओरिएंटेशन की सभी सेटिंग अब भी सबसे अच्छा अनुभव दे रही हों.
ज़्यादा जानकारी के लिए, इससे जुड़े बदलाव देखें.
रोटेशन के नए मोड की मदद से, उपयोगकर्ता सिस्टम बार में मौजूद बटन का इस्तेमाल करके, ज़रूरत पड़ने पर स्क्रीन को मैन्युअल तरीके से रोटेट कर सकते हैं.
टेक्स्ट
Android 9 में, टेक्स्ट से जुड़ी ये सुविधाएं उपलब्ध हैं:
पहले से कंप्यूट किया गया टेक्स्ट:
PrecomputedTextक्लास, टेक्स्ट रेंडर करने की परफ़ॉर्मेंस को बेहतर बनाता है. इसके लिए, यह आपको ज़रूरी जानकारी को पहले से कंप्यूट करने और कैश मेमोरी में सेव करने की सुविधा देता है. इससे आपका ऐप्लिकेशन, मुख्य थ्रेड से टेक्स्ट लेआउट को बंद कर पाता है.मैग्निफ़ायर:
Magnifierक्लास एक प्लैटफ़ॉर्म विजेट है. यह मैग्निफ़ायर API उपलब्ध कराता है. इससे सभी ऐप्लिकेशन में मैग्निफ़ायर की सुविधा का एक जैसा अनुभव मिलता है.स्मार्ट लिंकिफ़ाई: Android 9,
TextClassifierक्लास को बेहतर बनाता है. यह मशीन लर्निंग का इस्तेमाल करके, चुने गए टेक्स्ट में मौजूद कुछ इकाइयों की पहचान करता है और कार्रवाइयां सुझाता है. उदाहरण के लिए,TextClassifierआपके ऐप्लिकेशन को यह पता लगाने में मदद कर सकता है कि उपयोगकर्ता ने कोई फ़ोन नंबर चुना है. इसके बाद, आपका ऐप्लिकेशन उपयोगकर्ता को उस नंबर का इस्तेमाल करके फ़ोन कॉल करने का सुझाव दे सकता है.TextClassifierमें मौजूद सुविधाएं,Linkifyक्लास की जगह काम करती हैं.टेक्स्ट लेआउट: कई सुविधाजनक तरीकों और एट्रिब्यूट की मदद से, यूज़र इंटरफ़ेस (यूआई) डिज़ाइन को आसानी से लागू किया जा सकता है. ज़्यादा जानकारी के लिए,
TextViewका रेफ़रंस दस्तावेज़ देखें.
DEX फ़ाइलों का एआरटी में पहले से ही कन्वर्ज़न
Android 9 या इसके बाद के वर्शन पर काम करने वाले डिवाइसों पर, Android रनटाइम (एआरटी) का कंपाइलर, कंप्रेस की गई Dalvik Executable फ़ॉर्मैट (DEX) फ़ाइलों को और ऑप्टिमाइज़ करता है. इसके लिए, वह ऐप्लिकेशन पैकेज में मौजूद DEX फ़ाइलों को ज़्यादा कंपैक्ट फ़ॉर्मैट में बदलता है. इस बदलाव से, आपका ऐप्लिकेशन तेज़ी से चालू होता है. साथ ही, यह कम डिस्क स्पेस और रैम का इस्तेमाल करता है.
इस सुधार से, खास तौर पर कम सुविधाओं वाले उन डिवाइसों को फ़ायदा मिलता है जिनमें डिस्क I/O की स्पीड धीमी होती है.
उपयोगकर्ता के डिवाइस पर सिस्टम ट्रेसिंग की सुविधा
Android 9 में, आपको अपने डिवाइस से सिस्टम ट्रेस रिकॉर्ड करने की सुविधा मिलती है. इसके बाद, इन रिकॉर्डिंग की रिपोर्ट को अपनी डेवलपमेंट टीम के साथ शेयर किया जा सकता है. यह रिपोर्ट, एचटीएमएल फ़ॉर्मैट के साथ-साथ कई अन्य फ़ॉर्मैट में भी उपलब्ध है.
इन ट्रेस को इकट्ठा करके, अपने ऐप्लिकेशन की प्रोसेस और थ्रेड से जुड़ा टाइमिंग डेटा कैप्चर किया जा सकता है. साथ ही, डिवाइस की अन्य अहम स्थितियों को देखा जा सकता है.
इस टूल के बारे में ज़्यादा जानने के लिए, ऑन-डिवाइस सिस्टम ट्रेसिंग करना लेख पढ़ें.