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_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_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
को डिकोड किया जा सकता है. नीचे दिए गए कोड स्निपेट में, AnimatedImageDrawable
को डिकोड करने के लिए ImageDecoder
का इस्तेमाल करने का तरीका बताया गया है:
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 फ़ाइल से बिटमैप हासिल करता है. इसके बाद, HeifWriter
का इस्तेमाल करके, YUV बाइट बफ़र से HEIF इमेज लिखी जा सकती हैं. इसके अलावा, Surface
या Bitmap
के इंस्टेंस भी लिखे जा सकते हैं.
मीडिया मेट्रिक, AudioTrack
, AudioRecord
, और MediaDrm
क्लास से भी उपलब्ध होती हैं.
Android 9 में, MediaDRM
क्लास के लिए कई तरीके पेश किए गए हैं. इनकी मदद से, मेट्रिक, एचडीसीपी लेवल, सुरक्षा लेवल, और सेशन की संख्या का पता लगाया जा सकता है. साथ ही, सुरक्षा लेवल और सुरक्षित स्टॉप पर ज़्यादा कंट्रोल पाया जा सकता है. ज़्यादा जानकारी के लिए, एपीआई के अंतर की रिपोर्ट देखें.
Android 9 में, AAudio API, AAudioStream के कई अन्य एट्रिब्यूट के लिए सहायता जोड़ता है. इनमें इस्तेमाल, कॉन्टेंट का टाइप, और इनपुट प्रीसेट शामिल हैं. इन एट्रिब्यूट का इस्तेमाल करके, ऐसी स्ट्रीम बनाई जा सकती हैं जो वीओआईपी या कैमकोर्डर ऐप्लिकेशन के लिए ट्यून की गई हों. सेशन आईडी को सेट करके, 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 Lite जैसे हायर-लेवल मशीन लर्निंग फ़्रेमवर्क से मिलने वाले आउटपुट से मेल नहीं खा सकता. आपको
समस्या हल होने तक, सिर्फ़
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 कहा जाता था) HAL का एक वर्शन है, जो हार्डवेयर सुरक्षा मॉड्यूल में मौजूद होता है. इस मॉड्यूल में ये शामिल हैं:
- इसका अपना सीपीयू होता है.
- सुरक्षित स्टोरेज.
- यह एक रैंडम नंबर जनरेटर है.
- पैकेज में छेड़छाड़ और ऐप्लिकेशन को बिना अनुमति के साइडलोड करने से रोकने के लिए अतिरिक्त तरीके.
StrongBox KeyMint में सेव की गई कुंजियों की जांच करते समय, सिस्टम ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट (टीईई) की मदद से कुंजी की इंटिग्रिटी की पुष्टि करता है.
StrongBox KeyMint का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, हार्डवेयर सुरक्षा मॉड्यूल देखें.
कीस्टोर में सुरक्षा कुंजी इंपोर्ट करना
Android 9, की डिक्रिप्शन की अतिरिक्त सुरक्षा देता है. इसके लिए, यह ASN.1‑encoded की फ़ॉर्मैट का इस्तेमाल करके, एन्क्रिप्ट की गई कुंजियों को Keystore में सुरक्षित तरीके से इंपोर्ट करने की सुविधा जोड़ता है. इसके बाद, KeyMint, Keystore में मौजूद कुंजियों को डिक्रिप्ट करता है. इसलिए, कुंजियों का कॉन्टेंट कभी भी डिवाइस की होस्ट मेमोरी में सादे टेक्स्ट के तौर पर नहीं दिखता.
एन्क्रिप्ट की गई कुंजियों को ज़्यादा सुरक्षित तरीके से इंपोर्ट करने के बारे में ज़्यादा जानें.
की रोटेशन के साथ APK सिग्नेचर स्कीम
Android 9 में, APK सिग्नेचर स्कीम v3 का इस्तेमाल किया जा सकता है. इस स्कीम में, हर हस्ताक्षर करने वाले सर्टिफ़िकेट के लिए, हस्ताक्षर करने वाले ब्लॉक में रोटेशन के सबूत का रिकॉर्ड शामिल करने का विकल्प होता है. इस सुविधा की मदद से, आपके ऐप्लिकेशन को नए हस्ताक्षर करने वाले प्रमाणपत्र से साइन किया जा सकता है. इसके लिए, APK फ़ाइल के पिछले हस्ताक्षर करने वाले प्रमाणपत्रों को उस प्रमाणपत्र से लिंक किया जाता है जिससे अब इसे साइन किया गया है.
apksigner
का इस्तेमाल करके कुंजियां रोटेट करने के तरीके के बारे में ज़्यादा जानें.
सिर्फ़ अनलॉक किए गए डिवाइसों पर कुंजी को डिक्रिप्ट करने की अनुमति देने का विकल्प
Android 9 में unlockedDeviceRequired
फ़्लैग की सुविधा जोड़ी गई है. इस विकल्प से यह तय होता है कि क्या कीस्टोर को स्क्रीन अनलॉक करने की ज़रूरत है. ऐसा इसलिए, ताकि तय की गई कुंजी का इस्तेमाल करके, फ़्लाइट में मौजूद या सेव किए गए किसी भी डेटा को डिक्रिप्ट करने की अनुमति दी जा सके. इस तरह की कुंजियां, डिस्क पर सेव किए जाने वाले संवेदनशील डेटा को एन्क्रिप्ट (सुरक्षित) करने के लिए सबसे सही होती हैं. जैसे, स्वास्थ्य या एंटरप्राइज़ का डेटा. इस फ़्लैग से उपयोगकर्ताओं को यह भरोसा मिलता है कि डिवाइस लॉक होने पर डेटा को डिक्रिप्ट नहीं किया जा सकता. ऐसा तब होता है, जब उनका फ़ोन खो जाता है या चोरी हो जाता है.
डिवाइस लॉक होने पर, किसी कुंजी को डिक्रिप्ट होने से बचाने के लिए, setUnlockedDeviceRequired()
तरीके में true
पास करके फ़्लैग चालू करें. इस चरण को पूरा करने के बाद, जब उपयोगकर्ता की स्क्रीन लॉक हो जाती है, तो इस कुंजी का इस्तेमाल करके डेटा को डिक्रिप्ट या साइन करने के सभी अनुरोध पूरे नहीं किए जा सकते. लॉक किए गए डिवाइस को ऐक्सेस करने से पहले, पिन, पासवर्ड, फ़िंगरप्रिंट या किसी अन्य भरोसेमंद तरीके से पुष्टि करना ज़रूरी होता है.
लेगसी एन्क्रिप्शन की सुविधा
Android 9 वाले ऐसे डिवाइस जिनमें Keymaster 4 होता है उनमें ट्रिपल डेटा एन्क्रिप्शन एल्गोरिदम या ट्रिपल DES काम करता है. अगर आपका ऐप्लिकेशन, लेगसी सिस्टम के साथ इंटरऑपरेट करता है और इसके लिए Triple DES की ज़रूरत होती है, तो संवेदनशील क्रेडेंशियल को एन्क्रिप्ट (सुरक्षित) करते समय इस तरह के सिफ़र का इस्तेमाल करें.
अपने ऐप्लिकेशन को ज़्यादा सुरक्षित बनाने के तरीके के बारे में ज़्यादा जानने के लिए, Android डेवलपर के लिए सुरक्षा लेख पढ़ें.
WPS के इस्तेमाल पर रोक
सुरक्षा से जुड़ी वजहों से, 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:
Magnifier
क्लास एक प्लैटफ़ॉर्म विजेट है. यह Magnifier API उपलब्ध कराता है. इससे सभी ऐप्लिकेशन में, Magnifier की सुविधा का एक जैसा अनुभव मिलता है.स्मार्ट लिंकिफ़ाय: Android 9,
TextClassifier
क्लास को बेहतर बनाता है. यह मशीन लर्निंग का इस्तेमाल करके, चुने गए टेक्स्ट में मौजूद कुछ इकाइयों की पहचान करता है और कार्रवाइयां सुझाता है. उदाहरण के लिए,TextClassifier
आपके ऐप्लिकेशन को यह पता लगाने की अनुमति दे सकता है कि उपयोगकर्ता ने कोई फ़ोन नंबर चुना है. इसके बाद, आपका ऐप्लिकेशन उपयोगकर्ता को उस नंबर से फ़ोन कॉल करने का सुझाव दे सकता है.TextClassifier
में मौजूद सुविधाएं,Linkify
क्लास की सुविधाओं की जगह काम करती हैं.टेक्स्ट लेआउट: सुविधा के हिसाब से कई तरीकों और एट्रिब्यूट की मदद से, यूज़र इंटरफ़ेस (यूआई) डिज़ाइन को आसानी से लागू किया जा सकता है. ज़्यादा जानकारी के लिए,
TextView
का रेफ़रंस दस्तावेज़ देखें.
ART में DEX फ़ाइलों को पहले से ही कंपाइल करने की सुविधा
Android 9 या इसके बाद के वर्शन पर काम करने वाले डिवाइसों पर, Android रनटाइम (एआरटी) का कंपाइलर, कंप्रेस की गई Dalvik Executable फ़ॉर्मैट (DEX) फ़ाइलों को और ऑप्टिमाइज़ करता है. इसके लिए, वह ऐप्लिकेशन पैकेज में मौजूद DEX फ़ाइलों को ज़्यादा कंप्रेस किए गए फ़ॉर्मैट में बदलता है. इस बदलाव से, आपका ऐप्लिकेशन तेज़ी से शुरू हो पाएगा. साथ ही, यह डिस्क स्पेस और रैम का कम इस्तेमाल करेगा.
इस सुधार से, खास तौर पर उन डिवाइसों को फ़ायदा मिलता है जिनमें डिस्क I/O की स्पीड कम होती है.
डिवाइस पर सिस्टम ट्रेस करने की सुविधा
Android 9 में, आपको अपने डिवाइस से सिस्टम ट्रेस रिकॉर्ड करने की सुविधा मिलती है. इसके बाद, इन रिकॉर्डिंग की रिपोर्ट को अपनी डेवलपमेंट टीम के साथ शेयर किया जा सकता है. इस रिपोर्ट को एचटीएमएल जैसे कई फ़ॉर्मैट में देखा जा सकता है.
इन ट्रेस को इकट्ठा करके, अपने ऐप्लिकेशन की प्रोसेस और थ्रेड से जुड़ा टाइमिंग डेटा कैप्चर किया जा सकता है. साथ ही, डिवाइस की अन्य अहम स्थितियों को देखा जा सकता है.
इस टूल के बारे में ज़्यादा जानने के लिए, डिवाइस पर सिस्टम ट्रेसिंग करना लेख पढ़ें.