Android 5.0 के लिए API

एपीआई लेवल: 21

Android 5.0 (LOLLIPOP) में उपयोगकर्ताओं और ऐप्लिकेशन डेवलपर के लिए नई सुविधाएं उपलब्ध हैं. इस दस्तावेज़ में सबसे अहम नए एपीआई के बारे में जानकारी दी गई है.

अगर आपका ऐप्लिकेशन पब्लिश किया गया है, तो Android 5.0 के व्यवहार में होने वाले बदलाव ज़रूर देखें. आपको अपने ऐप्लिकेशन में इन बदलावों का ध्यान रखना चाहिए. व्यवहार में होने वाले ये बदलाव Android 5.0 डिवाइसों पर मौजूद आपके ऐप्लिकेशन पर असर डाल सकते हैं, भले ही आप नए एपीआई का इस्तेमाल न कर रहे हों या नई सुविधा को टारगेट कर रहे हों.

प्लैटफ़ॉर्म की नई सुविधाओं के बारे में अच्छी तरह जानने के लिए, Android Lollipop की हाइलाइट देखें.

डेवलप करना शुरू करें

Android 5.0 के लिए ऐप्लिकेशन बनाना शुरू करने के लिए, आपको सबसे पहले Android SDK टूल डाउनलोड करना होगा. इसके बाद, Android 5.0 SDK प्लैटफ़ॉर्म और सिस्टम इमेज डाउनलोड करने के लिए, SDK मैनेजर का इस्तेमाल करें.

अपने टारगेट एपीआई लेवल को अपडेट करना

Android 5.0 पर चलने वाले डिवाइसों के लिए, अपने ऐप्लिकेशन को बेहतर तरीके से ऑप्टिमाइज़ करने के लिए, targetSdkVersion को "21" पर सेट करें. इसके बाद, अपने ऐप्लिकेशन को Android 5.0 सिस्टम इमेज पर इंस्टॉल करें और उसकी जांच करें. इसके बाद, इस बदलाव के साथ अपडेट किया गया ऐप्लिकेशन पब्लिश करें.

अपने कोड में शर्तें जोड़कर, Android 5.0 API का इस्तेमाल किया जा सकता है. इसके लिए, आपको उन एपीआई लेवल की जांच करनी होगी जो आपके minSdkVersion के साथ काम नहीं करते. पुराने सिस्टम के साथ काम करने की सुविधा को बनाए रखने के बारे में ज़्यादा जानने के लिए, अलग-अलग प्लैटफ़ॉर्म के वर्शन के साथ काम करना लेख पढ़ें.

एपीआई लेवल कैसे काम करते हैं, इस बारे में ज़्यादा जानने के लिए, एपीआई लेवल क्या है? लेख पढ़ें

व्यवहार में हुए अहम बदलाव

अगर आपने Android के लिए पहले कोई ऐप्लिकेशन पब्लिश किया था, तो ध्यान रखें कि Android 5.0 में हुए बदलावों का असर आपके ऐप्लिकेशन पर पड़ सकता है.

पूरी जानकारी के लिए, कृपया Android 5.0 में हुए बदलाव देखें.

यूज़र इंटरफ़ेस

मटीरियल डिज़ाइन सपोर्ट

Android 5.0 में, Android की नई मटीरियल डिज़ाइन स्टाइल इस्तेमाल करने की सुविधा जोड़ी गई है. मटीरियल डिज़ाइन वाले ऐसे ऐप्लिकेशन बनाए जा सकते हैं जो विज़ुअल तौर पर डाइनैमिक होते हैं और जिनमें यूज़र इंटरफ़ेस (यूआई) एलिमेंट में बदलाव होते हैं. ये बदलाव, उपयोगकर्ताओं को स्वाभाविक लगते हैं. इस सहायता में ये शामिल हैं:

  • मटीरियल थीम
  • शैडो देखें
  • RecyclerView विजेट
  • ड्रॉ किए जा सकने वाले ऐनिमेशन और स्टाइल वाले इफ़ेक्ट
  • मटीरियल डिज़ाइन ऐनिमेशन और गतिविधि के ट्रांज़िशन इफ़ेक्ट
  • व्यू की स्थिति के आधार पर व्यू प्रॉपर्टी के लिए ऐनिमेटर
  • पसंद के मुताबिक बनाए जा सकने वाले यूज़र इंटरफ़ेस (यूआई) विजेट और ऐप्लिकेशन बार. साथ ही, कलर पैलेट, जिन्हें आपके पास कंट्रोल करने का विकल्प होता है
  • एक्सएमएल वेक्टर ग्राफ़िक पर आधारित ऐनिमेशन वाले और बिना ऐनिमेशन वाले ड्रॉबल

अपने ऐप्लिकेशन में मटीरियल डिज़ाइन फ़ंक्शन जोड़ने के बारे में ज़्यादा जानने के लिए, मटीरियल डिज़ाइन देखें.

हाल ही में इस्तेमाल किए गए दस्तावेज़ और गतिविधियां दिखाने वाली स्क्रीन

पिछली रिलीज़ में, हाल ही में इस्तेमाल किए गए ऐप्लिकेशन की स्क्रीन पर, हर उस ऐप्लिकेशन के लिए सिर्फ़ एक टास्क दिखता था जिसका उपयोगकर्ता ने हाल ही में इस्तेमाल किया था. अब आपके ऐप्लिकेशन में, ज़रूरत के हिसाब से दस्तावेज़ों पर एक साथ ज़्यादा टास्क पूरे किए जा सकते हैं. इस सुविधा की मदद से, एक साथ कई काम किए जा सकते हैं. इसके लिए, उपयोगकर्ताओं को हाल ही में इस्तेमाल किए गए ऐप्लिकेशन की स्क्रीन पर जाकर, अलग-अलग गतिविधियों और दस्तावेज़ों के बीच तुरंत स्विच करने की सुविधा मिलती है. यह सुविधा सभी ऐप्लिकेशन पर एक जैसी होती है. एक साथ किए जाने वाले ऐसे कामों के उदाहरणों में ये शामिल हो सकते हैं: वेब ब्राउज़र ऐप्लिकेशन में खुले टैब, प्रॉडक्टिविटी ऐप्लिकेशन में दस्तावेज़, गेम में एक साथ कई मैच या मैसेजिंग ऐप्लिकेशन में चैट. आपका ऐप्लिकेशन ActivityManager.AppTask क्लास की मदद से टास्क मैनेज कर सकता है.

लॉजिकल ब्रेक डालने के लिए, ताकि सिस्टम आपकी गतिविधि को नया टास्क मान सके. इसके लिए, startActivity() की मदद से गतिविधि को लॉन्च करते समय FLAG_ACTIVITY_NEW_DOCUMENT का इस्तेमाल करें. इसके अलावा, मेनिफ़ेस्ट में <activity> एलिमेंट के documentLaunchMode एट्रिब्यूट को "intoExisting" या "always" पर सेट करके भी ऐसा किया जा सकता है.

हाल ही की स्क्रीन को व्यवस्थित करने से बचने के लिए, आप अपने ऐप्लिकेशन से ज़्यादा से ज़्यादा टास्क सेट कर सकते हैं कि उस स्क्रीन पर कितने टास्क दिखें. ऐसा करने के लिए, <application> एट्रिब्यूट की वैल्यू android:maxRecents पर सेट करें. फ़िलहाल, हर उपयोगकर्ता के लिए ज़्यादा से ज़्यादा 50 टास्क सेट किए जा सकते हैं. कम रैम वाले डिवाइसों के लिए, यह संख्या 25 है.

'हाल ही की स्क्रीन' पर मौजूद टास्क को, फिर से चालू होने के दौरान बनाए रखने के लिए सेट किया जा सकता है. परसिस्टेंस व्यवहार को कंट्रोल करने के लिए, android:persistableMode एट्रिब्यूट का इस्तेमाल करें. हाल ही की स्क्रीन में जाकर, किसी गतिविधि की विज़ुअल प्रॉपर्टी भी बदली जा सकती है. जैसे, गतिविधि का रंग, लेबल, और आइकॉन. इसके लिए, setTaskDescription() तरीके का इस्तेमाल करें.

वेबव्यू से जुड़े अपडेट

Android 5.0, Chromium M37 में WebView लागू करने के तरीके को अपडेट करता है, जिससे सुरक्षा और स्थिरता से जुड़ी बेहतर सुविधाएं मिलती हैं. साथ ही, गड़बड़ियां भी ठीक की जाती हैं. Android 5.0 पर चल रहे WebView के लिए, डिफ़ॉल्ट उपयोगकर्ता-एजेंट स्ट्रिंग को अपडेट किया गया है, ताकि वर्शन नंबर के तौर पर 37.0.0.0 शामिल किया जा सके.

इस रिलीज़ में PermissionRequest क्लास की जानकारी दी गई है. इससे आपका ऐप्लिकेशन, getUserMedia() जैसे वेब एपीआई के ज़रिए, कैमरा और माइक्रोफ़ोन जैसे सुरक्षित संसाधनों को ऐक्सेस करने के लिए WebView को अनुमति दे सकता है. WebView को अनुमतियां देने के लिए, आपके ऐप्लिकेशन के पास इन संसाधनों के लिए ज़रूरी Android अनुमतियां होनी चाहिए.

onShowFileChooser() के नए तरीके की मदद से, अब WebView में इनपुट फ़ॉर्म फ़ील्ड का इस्तेमाल किया जा सकता है. साथ ही, Android डिवाइस से इमेज और फ़ाइलें चुनने के लिए, फ़ाइल चुनने वाला टूल लॉन्च किया जा सकता है.

इसके अलावा, इस रिलीज़ में WebAudio, WebGL, और WebRTC ओपन स्टैंडर्ड काम करते हैं. इस रिलीज़ में शामिल की गई नई सुविधाओं के बारे में ज़्यादा जानने के लिए, Android के लिए वेबव्यू देखें.

स्क्रीन कैप्चर करना और उसे शेयर करना

Android 5.0 में, नए android.media.projection एपीआई की मदद से, अपने ऐप्लिकेशन में स्क्रीन कैप्चर करने और स्क्रीन शेयर करने की सुविधाएं जोड़ी जा सकती हैं. यह सुविधा तब काम आती है, जब किसी वीडियो कॉन्फ़्रेंसिंग ऐप्लिकेशन में स्क्रीन शेयर करने की सुविधा चालू करनी हो.

createVirtualDisplay() के नए तरीके की मदद से, आपका ऐप्लिकेशन मुख्य स्क्रीन (डिफ़ॉल्ट डिसप्ले) के कॉन्टेंट को Surface ऑब्जेक्ट में कैप्चर कर सकता है. इसके बाद, आपका ऐप्लिकेशन इस कॉन्टेंट को नेटवर्क पर भेज सकता है. यह एपीआई सिर्फ़ असुरक्षित स्क्रीन कॉन्टेंट को कैप्चर करने की अनुमति देता है, सिस्टम के ऑडियो को नहीं. स्क्रीन कैप्चर करने के लिए, आपके ऐप्लिकेशन को पहले उपयोगकर्ता की अनुमति लेनी होगी. इसके लिए, उसे स्क्रीन कैप्चर डायलॉग लॉन्च करना होगा. इसके लिए, createScreenCaptureIntent() के ज़रिए हासिल किए गए Intent का इस्तेमाल किया जाएगा.

नए एपीआई इस्तेमाल करने का उदाहरण देखने के लिए, सैंपल प्रोजेक्ट में MediaProjectionDemo क्लास देखें.

सूचनाएं

लॉक स्क्रीन पर मिलने वाली सूचनाएं

Android 5.0 की लॉक स्क्रीन पर सूचनाएं दिख सकती हैं. उपयोगकर्ता सेटिंग में जाकर यह चुन सकते हैं कि संवेदनशील सूचना वाले कॉन्टेंट को सुरक्षित लॉक स्क्रीन पर दिखाने की अनुमति दी जाए या नहीं.

जब आपके ऐप्लिकेशन की सूचनाएं सुरक्षित लॉक स्क्रीन पर दिखें, तब ऐप्लिकेशन में दिखने वाली जानकारी के लेवल को कंट्रोल किया जा सकता है. कॉन्टेंट दिखने के लेवल को कंट्रोल करने के लिए, setVisibility() को कॉल करें और इनमें से कोई एक वैल्यू बताएं:

  • VISIBILITY_PRIVATE: यह सूचना का आइकॉन जैसी बुनियादी जानकारी दिखाता है. हालांकि, यह सूचना का पूरा कॉन्टेंट नहीं दिखाता.
  • VISIBILITY_PUBLIC: सूचना का पूरा कॉन्टेंट दिखाता है.
  • VISIBILITY_SECRET: इस बटन पर क्लिक करने से, सूचना के आइकॉन के अलावा और कुछ नहीं दिखता.

अगर सूचना दिखने का लेवल VISIBILITY_PRIVATE है, तो सूचना के कॉन्टेंट का ऐसा वर्शन भी दिया जा सकता है जिसमें निजी जानकारी छिपी हो. उदाहरण के लिए, कोई मैसेज (एसएमएस) ऐप्लिकेशन ऐसी सूचना दिखा सकता है जो दिखाता है कि "आपके पास 3 नए मैसेज हैं", लेकिन मैसेज के कॉन्टेंट और भेजने वालों को छिपा देता है. यह वैकल्पिक सूचना देने के लिए, सबसे पहले Notification.Builder का इस्तेमाल करके, बदली जाने वाली सूचना बनाएं. निजी सूचना ऑब्जेक्ट बनाते समय, setPublicVersion() तरीके से उसमें बदली गई सूचना अटैच करें.

सूचनाओं का मेटाडेटा

Android 5.0, सूचनाओं को ज़्यादा बेहतर तरीके से क्रम में लगाने के लिए, आपके ऐप्लिकेशन की सूचनाओं से जुड़े मेटाडेटा का इस्तेमाल करता है. मेटाडेटा सेट करने के लिए, नोटिफ़िकेशन बनाते समय Notification.Builder में इन तरीकों को कॉल करें:

  • setCategory(): इससे सिस्टम को यह पता चलता है कि डिवाइस के प्राथमिकता मोड में होने पर, ऐप्लिकेशन की सूचनाएं किस तरह मैनेज की जानी चाहिए. उदाहरण के लिए, अगर कोई सूचना आने वाले कॉल, फटाफट मैसेज या अलार्म के बारे में बताती है.
  • setPriority(): सूचना को सामान्य सूचनाओं से ज़्यादा या कम ज़रूरी के तौर पर मार्क करता है. अगर सूचना में आवाज़ या वाइब्रेशन होता है, तो प्राथमिकता फ़ील्ड को PRIORITY_MAX या PRIORITY_HIGH पर सेट की गई सूचनाएं छोटी फ़्लोटिंग विंडो में दिखती हैं.
  • addPerson(): इसकी मदद से, सूचना से जुड़े एक या उससे ज़्यादा लोगों को जोड़ा जा सकता है. आपका ऐप्लिकेशन इसका इस्तेमाल, सिस्टम को यह सिग्नल देने के लिए कर सकता है कि उसे चुनिंदा लोगों की सूचनाओं को एक साथ ग्रुप करना चाहिए या इन लोगों की सूचनाओं को ज़्यादा ज़रूरी के तौर पर रैंक करना चाहिए.

ग्राफ़िक्स

OpenGL ES 3.1 के साथ काम करना

Android 5.0 में OpenGL ES 3.1 के लिए Java इंटरफ़ेस और खास सुविधा मिलती है. OpenGL ES 3.1 में दी गई मुख्य नई सुविधाओं में ये शामिल हैं:

  • कंप्यूट शेडर
  • अलग-अलग शेडर ऑब्जेक्ट
  • इनडायरेक्ट ड्रॉ कमांड
  • मल्टीसैंपल और स्टेंसिल टेक्स्चर
  • शेडिंग की भाषा में सुधार
  • ब्लेंड के बेहतर मोड और डीबग करने के लिए एक्सटेंशन
  • OpenGL ES 2.0 और 3.0 के साथ पुराने वर्शन के साथ काम करने की सुविधा

Android पर OpenGL ES 3.1 के लिए Java इंटरफ़ेस, GLES31 के साथ दिया गया है. OpenGL ES 3.1 का इस्तेमाल करते समय, पक्का करें कि आपने अपनी मेनिफ़ेस्ट फ़ाइल में, <uses-feature> टैग और android:glEsVersion एट्रिब्यूट के साथ इसकी जानकारी दी हो. उदाहरण के लिए:

<manifest>
    <uses-feature android:glEsVersion="0x00030001" />
    ...
</manifest>

OpenGL ES का इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, OpenGL ES API की गाइड देखें. इसमें, रनटाइम के दौरान डिवाइस पर काम करने वाले OpenGL ES वर्शन को देखने का तरीका भी शामिल है.

Android एक्सटेंशन पैक

इस रिलीज़ में, OpenGL ES 3.1 के साथ-साथ, बेहतर ग्राफ़िक्स फ़ंक्शन के लिए, Java इंटरफ़ेस और नेटिव सपोर्ट वाला एक्सटेंशन पैक भी उपलब्ध है. Android, इन एक्सटेंशन को एक ही पैकेज के तौर पर इस्तेमाल करता है. (अगर ANDROID_extension_pack_es31a एक्सटेंशन मौजूद है, तो आपका ऐप्लिकेशन यह मान सकता है कि पैकेज में सभी एक्सटेंशन मौजूद हैं. साथ ही, एक ही #extension स्टेटमेंट की मदद से, शेडिंग लैंग्वेज की सुविधाएं चालू की जा सकती हैं.)

एक्सटेंशन पैक में ये सुविधाएं काम करती हैं:

  • शेडर स्टोरेज बफ़र, इमेज, और ऐटमिक्स के लिए, फ़्रैगमेंट शेडर सहायता की गारंटी. OpenGL ES 3.1 में फ़्रैगमेंट शेडर की सुविधा देना ज़रूरी नहीं है.
  • टेसेलेशन और ज्यामिति शेडर
  • ASTC (LDR) टेक्सचर कंप्रेशन फ़ॉर्मैट
  • हर सैंपल के लिए इंटरपोलेशन और शेडिंग
  • फ़्रेम बफ़र में हर रंग के अटैचमेंट के लिए, अलग-अलग ब्लेंड मोड

एक्सटेंशन पैक के लिए Java इंटरफ़ेस, GLES31Ext के साथ दिया गया है. अपने ऐप्लिकेशन के मेनिफ़ेस्ट में, यह एलान किया जा सकता है कि आपका ऐप्लिकेशन सिर्फ़ उन डिवाइसों पर इंस्टॉल किया जाना चाहिए जिन पर एक्सटेंशन पैक काम करता है. उदाहरण के लिए:

<manifest>
    <uses-feature android:name=“android.hardware.opengles.aep”
        android:required="true" />
    ...
</manifest>

मीडिया

कैमरे की बेहतर सुविधाओं के लिए Camera API

Android 5.0 में नया android.hardware.camera2 एपीआई दिया गया है. इससे फ़ोटो को बारीकी से कैप्चर करने और इमेज को प्रोसेस करने में मदद मिलती है. अब आपके पास getCameraIdList() की मदद से, सिस्टम के लिए उपलब्ध कैमरा डिवाइसों को प्रोग्राम के हिसाब से ऐक्सेस करने की सुविधा है. साथ ही, openCamera() की मदद से किसी खास डिवाइस से कनेक्ट किया जा सकता है. इमेज कैप्चर करने के लिए, कोई CameraCaptureSession बनाएं और कैप्चर की गई इमेज भेजने के लिए Surface ऑब्जेक्ट तय करें. CameraCaptureSession को कॉन्फ़िगर करके, एक क्लिक में एक या कई फ़ोटो ली जा सकती हैं.

नई इमेज कैप्चर होने की सूचना पाने के लिए, CameraCaptureSession.CaptureCallback लिसनर को लागू करें और उसे कैप्चर करने के अनुरोध में सेट करें. जब सिस्टम, इमेज कैप्चर करने का अनुरोध पूरा कर लेता है, तब CameraCaptureSession.CaptureCallback लिसनर को onCaptureCompleted() पर एक कॉल मिलता है जिससे आपको CaptureResult में इमेज कैप्चर मेटाडेटा की जानकारी मिलती है.

CameraCharacteristics क्लास आपके ऐप्लिकेशन को यह पता लगाने में मदद करती है कि किसी डिवाइस में कैमरे की कौनसी सुविधाएं उपलब्ध हैं. ऑब्जेक्ट की INFO_SUPPORTED_HARDWARE_LEVEL प्रॉपर्टी, कैमरे के फ़ंक्शन के लेवल को दिखाती है.

  • सभी डिवाइसों पर कम से कम INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY हार्डवेयर लेवल काम करता है. इस लेवल पर, डिवाइसों की सुविधाएं, बंद किए गए Camera एपीआई की सुविधाओं के बराबर होती हैं.
  • INFO_SUPPORTED_HARDWARE_LEVEL_FULL हार्डवेयर लेवल के साथ काम करने वाले डिवाइसों में, मैन्युअल तरीके से कैप्चर और पोस्ट-प्रोसेसिंग को कंट्रोल किया जा सकता है. साथ ही, ये हाई फ़्रेम रेट पर हाई रिज़ॉल्यूशन वाली इमेज कैप्चर कर सकते हैं.

अपडेट किए गए Camera API को इस्तेमाल करने का तरीका जानने के लिए, इस रिलीज़ में Camera2Basic और Camera2Video लागू करने के सैंपल देखें.

ऑडियो प्लेबैक

इस रिलीज़ में AudioTrack में किए गए ये बदलाव शामिल हैं:

  • अब आपका ऐप्लिकेशन फ़्लोटिंग-पॉइंट फ़ॉर्मैट में ऑडियो डेटा दे सकता है (ENCODING_PCM_FLOAT). इससे ज़्यादा डाइनैमिक रेंज, एक जैसी सटीक जानकारी, और ज़्यादा हेडरूम की अनुमति मिलती है. फ़्लोटिंग-पॉइंट अंकगणित, खास तौर पर बीच की गणनाओं के दौरान मददगार होता है. प्लेबैक एंडपॉइंट में कम बिट डेप्थ के साथ और ऑडियो डेटा के लिए पूर्णांक फ़ॉर्मैट का इस्तेमाल किया जाता है. (Android 5.0 में, इंटरनल पाइपलाइन के कुछ हिस्से अब भी फ़्लोटिंग पॉइंट नहीं हैं.)
  • अब आपका ऐप्लिकेशन, MediaCodec में बताए गए फ़ॉर्मैट में ByteBuffer के तौर पर ऑडियो डेटा दे सकता है.
  • WRITE_NON_BLOCKING विकल्प की मदद से, कुछ ऐप्लिकेशन के लिए बफ़रिंग और मल्टीथ्रेडिंग को आसान बनाया जा सकता है.

मीडिया प्लेबैक कंट्रोल

सूचना और मीडिया के नए एपीआई का इस्तेमाल करके, यह पक्का करें कि सिस्टम यूज़र इंटरफ़ेस (यूआई) को आपके मीडिया प्लेबैक के बारे में पता हो. साथ ही, वह एल्बम आर्ट को निकालकर दिखा सके. नई MediaSession और MediaController क्लास की मदद से, अब यूज़र इंटरफ़ेस (यूआई) और सेवा के हिसाब से मीडिया चलाना आसान हो गया है.

नई MediaSession क्लास, अब काम नहीं करने वाली RemoteControlClient क्लास की जगह लेती है. साथ ही, ट्रांसपोर्ट कंट्रोल और मीडिया बटन को हैंडल करने के लिए, कॉलबैक के तरीकों का एक सेट उपलब्ध कराती है. अगर आपका ऐप्लिकेशन मीडिया चलाता है और Android TV या Wear प्लैटफ़ॉर्म पर चलता है, तो ट्रांसपोर्ट कंट्रोल को मैनेज करने के लिए MediaSession क्लास का इस्तेमाल करें. इसके लिए, वही कॉलबैक तरीके इस्तेमाल करें जो ऊपर बताए गए हैं.

अब आपके पास नई MediaController क्लास की मदद से, अपना मीडिया कंट्रोलर ऐप्लिकेशन बनाने का विकल्प है. यह क्लास आपके ऐप्लिकेशन की यूज़र इंटरफ़ेस (यूआई) प्रोसेस से मीडिया प्लेबैक को मॉनिटर और कंट्रोल करने का एक थ्रेड-सुरक्षित तरीका देती है. कंट्रोलर बनाते समय, कोई MediaSession.Token ऑब्जेक्ट तय करें, ताकि आपका ऐप्लिकेशन दिए गए MediaSession के साथ इंटरैक्ट कर सके. MediaController.TransportControls तरीकों का इस्तेमाल करके, उस सेशन पर मीडिया प्लेबैक को कंट्रोल करने के लिए, play(), stop(), skipToNext(), और setRating() जैसे निर्देश भेजे जा सकते हैं. कंट्रोलर की मदद से, MediaController.Callback ऑब्जेक्ट को भी रजिस्टर किया जा सकता है, ताकि सेशन में मेटाडेटा और स्थिति में होने वाले बदलावों को सुना जा सके.

इसके अलावा, Notification.MediaStyle क्लास की मदद से, मीडिया सेशन से जुड़ी रिच सूचनाएं बनाई जा सकती हैं. इनसे मीडिया चलाने की सुविधा को कंट्रोल किया जा सकता है.

मीडिया ब्राउज़ करना

Android 5.0 में, नए android.media.browse एपीआई की मदद से, ऐप्लिकेशन के लिए दूसरे ऐप्लिकेशन की मीडिया कॉन्टेंट लाइब्रेरी को ब्राउज़ करने की सुविधा उपलब्ध कराई गई है. अपने ऐप्लिकेशन में मीडिया कॉन्टेंट दिखाने के लिए, MediaBrowserService क्लास को बढ़ाएं. MediaBrowserService को लागू करने पर, आपको MediaSession.Token का ऐक्सेस देना चाहिए, ताकि ऐप्लिकेशन आपकी सेवा से उपलब्ध कराया गया मीडिया कॉन्टेंट चला सकें.

मीडिया ब्राउज़र सेवा के साथ इंटरैक्ट करने के लिए, MediaBrowser क्लास का इस्तेमाल करें. MediaBrowser इंस्टेंस बनाते समय, MediaSession के लिए कॉम्पोनेंट का नाम बताएं. उस ब्राउज़र इंस्टेंस का इस्तेमाल करके, आपका ऐप्लिकेशन उससे जुड़ी सेवा से कनेक्ट हो सकता है और उस सेवा के ज़रिए दिखाए गए कॉन्टेंट को चलाने के लिए, MediaSession.Token ऑब्जेक्ट हासिल कर सकता है.

डिवाइस का स्टोरेज

डायरेक्ट्री चुनें

Android 5.0 में, डिवाइस के स्टोरेज ऐक्सेस फ़्रेमवर्क को बेहतर बनाया गया है. इससे उपयोगकर्ताओं को पूरी डायरेक्ट्री सबट्री चुनने की सुविधा मिलती है. साथ ही, ऐप्लिकेशन को उसमें मौजूद सभी दस्तावेज़ों को पढ़ने/लिखने का ऐक्सेस मिलता है. इसके लिए, उपयोगकर्ता को हर आइटम के लिए पुष्टि करने की ज़रूरत नहीं होती.

डायरेक्ट्री सबट्री चुनने के लिए, एक OPEN_DOCUMENT_TREE इंटेंट बनाएं और भेजें. सिस्टम, सबट्री चुनने की सुविधा वाले सभी DocumentsProvider इंस्टेंस दिखाता है. इससे उपयोगकर्ता, डायरेक्ट्री को ब्राउज़ करके चुन सकता है. दिया गया यूआरआई, चुनी गई सबट्री का ऐक्सेस दिखाता है. इसके बाद, सबट्री को एक्सप्लोर करने के लिए, buildChildDocumentsUriUsingTree() और buildDocumentUriUsingTree() के साथ-साथ query() का इस्तेमाल किया जा सकता है.

createDocument() वाले नए तरीके से, आपको सबट्री के नीचे कहीं भी नए दस्तावेज़ या डायरेक्ट्री बनाने की सुविधा मिलती है. मौजूदा दस्तावेज़ों को मैनेज करने के लिए, renameDocument() और deleteDocument() का इस्तेमाल करें. इन कॉल के लिए, कॉल जारी करने से पहले, सेवा देने वाली कंपनी की सहायता टीम की पुष्टि करने के लिए COLUMN_FLAGS देखें.

अगर आपको DocumentsProvider लागू करना है और आपको सबट्री चुनने की सुविधा चाहिए, तो isChildDocument() लागू करें और अपने COLUMN_FLAGS में FLAG_SUPPORTS_IS_CHILD शामिल करें.

Android 5.0 में, शेयर किए गए स्टोरेज में पैकेज के हिसाब से नई डायरेक्ट्री भी जोड़ी गई हैं. यहां आपका ऐप्लिकेशन, MediaStore में शामिल करने के लिए मीडिया फ़ाइलें डाल सकता है. नया getExternalMediaDirs(), शेयर किए गए सभी स्टोरेज डिवाइसों पर इन डायरेक्ट्री के पाथ दिखाता है. getExternalFilesDir() की तरह, आपके ऐप्लिकेशन को, दिखाए गए पाथ को ऐक्सेस करने के लिए किसी और अनुमति की ज़रूरत नहीं है. प्लैटफ़ॉर्म, समय-समय पर इन डायरेक्ट्री में नए मीडिया को स्कैन करता है. हालांकि, नए कॉन्टेंट को साफ़ तौर पर स्कैन करने के लिए, MediaScannerConnection का इस्तेमाल भी किया जा सकता है.

वायरलेस और कनेक्टिविटी

एक से ज़्यादा इंटरनेट कनेक्शन

Android 5.0 में, एक से ज़्यादा नेटवर्क के लिए काम करने वाले नए एपीआई उपलब्ध हैं. इनकी मदद से, आपके ऐप्लिकेशन को खास सुविधाओं वाले उपलब्ध नेटवर्क को डाइनैमिक तरीके से स्कैन करने और उनसे कनेक्ट करने में मदद मिलती है. यह सुविधा तब काम की होती है, जब आपके ऐप्लिकेशन को किसी खास नेटवर्क की ज़रूरत होती है. जैसे, SUPL, एमएमएस या कैरियर-बिलिंग नेटवर्क. इसके अलावा, किसी खास तरह के ट्रांसपोर्ट प्रोटोकॉल का इस्तेमाल करके डेटा भेजने के लिए भी यह सुविधा काम की होती है.

अपने ऐप्लिकेशन से डाइनैमिक तौर पर किसी नेटवर्क को चुनने और उससे कनेक्ट करने के लिए, यह तरीका अपनाएं:

  1. ConnectivityManager बनाएं.
  2. NetworkRequest ऑब्जेक्ट बनाने के लिए, NetworkRequest.Builder क्लास का इस्तेमाल करें. साथ ही, नेटवर्क की उन सुविधाओं और ट्रांसपोर्ट के उस टाइप की जानकारी दें जिसमें आपके ऐप्लिकेशन की दिलचस्पी है.
  3. सही नेटवर्क स्कैन करने के लिए, requestNetwork() या registerNetworkCallback() को कॉल करें. इसके बाद, NetworkRequest ऑब्जेक्ट और ConnectivityManager.NetworkCallback को लागू करें. सही नेटवर्क का पता चलने पर, अगर आपको उस पर सही से स्विच करना है, तो requestNetwork() तरीके का इस्तेमाल करें. स्कैन किए गए नेटवर्क की सूचनाएं पाने के लिए, अगर आपको उस नेटवर्क पर स्विच नहीं करना है, तो registerNetworkCallback() तरीके का इस्तेमाल करें.

जब सिस्टम किसी सही नेटवर्क का पता लगाता है, तो वह नेटवर्क से कनेक्ट हो जाता है और onAvailable() कॉलबैक को शुरू करता है. नेटवर्क के बारे में ज़्यादा जानकारी पाने के लिए, कॉलबैक से Network ऑब्जेक्ट का इस्तेमाल किया जा सकता है. इसके अलावा, चुने गए नेटवर्क का इस्तेमाल करने के लिए ट्रैफ़िक को डायरेक्ट किया जा सकता है.

ब्लूटूथ कम ऊर्जा

Android 4.3 में, ब्लूटूथ स्मार्ट (ब्लूटूथ एलई) के लिए प्लैटफ़ॉर्म की सहायता शुरू की गई थी. Android 5.0 में, अब Android डिवाइस ब्लूटूथ LE पेरिफ़रल डिवाइस के तौर पर काम कर सकता है. ऐप्लिकेशन इस सुविधा का इस्तेमाल करके, आस-पास मौजूद डिवाइसों को अपनी मौजूदगी के बारे में बता सकते हैं. उदाहरण के लिए, ऐसे ऐप्लिकेशन बनाए जा सकते हैं जो किसी डिवाइस को पेडोमीटर या हेल्थ मॉनिटर के तौर पर काम करने देते हैं और अपने डेटा को किसी अन्य ब्लूटूथ LE डिवाइस से शेयर करने देते हैं.

नए android.bluetooth.le API की मदद से आपके ऐप्लिकेशन, विज्ञापन ब्रॉडकास्ट कर सकते हैं, जवाबों को स्कैन कर सकते हैं, और आस-पास के ब्लूटूथ डिवाइसों से कनेक्ट कर सकते हैं. विज्ञापन और स्कैनिंग की नई सुविधाओं का इस्तेमाल करने के लिए, अपने मेनिफ़ेस्ट में BLUETOOTH_ADMIN अनुमति जोड़ें. जब उपयोगकर्ता Play Store से आपका ऐप्लिकेशन अपडेट करते हैं या डाउनलोड करते हैं, तो उनसे आपके ऐप्लिकेशन को यह अनुमति देने के लिए कहा जाता है: "ब्लूटूथ कनेक्शन की जानकारी: इससे ऐप्लिकेशन को ब्लूटूथ को कंट्रोल करने की अनुमति मिलती है. इसमें आस-पास के ब्लूटूथ डिवाइसों के बारे में जानकारी पाने या उन्हें ब्रॉडकास्ट करने की सुविधा भी शामिल है."

ब्लूटूथ एलई विज्ञापन दिखाने की सुविधा शुरू करने के लिए, startAdvertising() को कॉल करें और AdvertiseCallback क्लास को लागू करें, ताकि अन्य डिवाइस आपके ऐप्लिकेशन को खोज सकें. कॉलबैक ऑब्जेक्ट को, विज्ञापन कार्रवाई के सफल या न होने की रिपोर्ट मिलती है.

Android 5.0 में ScanFilter क्लास की जानकारी मिलती है, ताकि आपका ऐप्लिकेशन सिर्फ़ उन खास तरह के डिवाइसों को स्कैन कर सके जिनमें उसकी दिलचस्पी है. ब्लूटूथ LE डिवाइसों को स्कैन करने के लिए, startScan() को कॉल करें और फ़िल्टर की सूची पास करें. मेथड कॉल में, ब्लूटूथ LE विज्ञापन मिलने पर, आपको रिपोर्ट करने के लिए ScanCallback को लागू करने की सुविधा भी देनी होगी.

एनएफ़सी को बेहतर बनाने की सुविधाएं

Android 5.0 में एनएफ़सी के बड़े और ज़्यादा सुविधाजनक इस्तेमाल को चालू करने के लिए, इन सुधारों को जोड़ा गया है:

  • Android Beam की सुविधा अब शेयर करें मेन्यू में उपलब्ध है.
  • आपका ऐप्लिकेशन, डेटा शेयर करने के लिए invokeBeam() को कॉल करके, उपयोगकर्ता के डिवाइस पर Android Beam को चालू कर सकता है. इससे उपयोगकर्ता को डेटा ट्रांसफ़र पूरा करने के लिए एनएफ़सी की सुविधा वाले दूसरे डिवाइस पर, डिवाइस को मैन्युअल तरीके से टैप करने की ज़रूरत नहीं पड़ती.
  • UTF-8 टेक्स्ट डेटा वाला NDEF रिकॉर्ड बनाने के लिए, createTextRecord() वाले नए तरीके का इस्तेमाल किया जा सकता है.
  • अगर पेमेंट ऐप्लिकेशन डेवलप किया जा रहा है, तो अब registerAidsForService() पर कॉल करके, एनएफ़सी ऐप्लिकेशन आईडी (एआईडी) को डाइनैमिक तरीके से रजिस्टर किया जा सकता है. setPreferredService() का इस्तेमाल करके, अपनी पसंदीदा कार्ड इम्यूलेशन सेवा भी सेट की जा सकती है. इसका इस्तेमाल तब किया जाना चाहिए, जब कोई खास गतिविधि फ़ोरग्राउंड में हो.

Project Volta

नई सुविधाओं के साथ ही, Android 5.0 बैटरी लाइफ़ को बेहतर बनाने पर ज़ोर देता है. अपने ऐप्लिकेशन के लिए बिजली की खपत को समझने और उसे ऑप्टिमाइज़ करने के लिए, नए एपीआई और टूल का इस्तेमाल करें.

जॉब शेड्यूल करना

Android 5.0 में एक नया JobScheduler API मिलता है जो आपको बैटरी लाइफ़ को ऑप्टिमाइज़ करने देता है. इसके लिए, सिस्टम के लिए जॉब बाद में या कुछ खास स्थितियों में (जैसे कि जब डिवाइस चार्ज हो रहा हो) तय किया जाता है. जॉब शेड्यूल करने की सुविधा इन स्थितियों में काम आती है:

  • ऐप्लिकेशन में अलग-अलग काम करने के लिए उपलब्ध सुविधाएं हैं, जिन्हें बाद में टाला जा सकता है.
  • ऐप्लिकेशन में वह काम है जो आपको यूनिट के प्लग-इन होने पर करना है.
  • ऐप्लिकेशन में ऐसा काम है जिसके लिए नेटवर्क ऐक्सेस या वाई-फ़ाई कनेक्शन की ज़रूरत है.
  • ऐप्लिकेशन में कई ऐसे टास्क हैं जिन्हें आपको नियमित शेड्यूल पर एक साथ चलाना है.

यूनिट ऑफ़ वर्क को JobInfo ऑब्जेक्ट में शामिल किया जाता है. इस ऑब्जेक्ट में, शेड्यूल करने से जुड़ी शर्तें बताई गई हैं.

शेड्यूल किए गए टास्क को कैसे चलाना है, यह कॉन्फ़िगर करने के लिए JobInfo.Builder क्लास का इस्तेमाल करें. टास्क को किसी खास समय पर चलाने के लिए शेड्यूल किया जा सकता है. जैसे:

  • डिवाइस चार्ज होने के दौरान चालू करें
  • मीटर न किए गए नेटवर्क से डिवाइस के कनेक्ट होने पर शुरू हो
  • डिवाइस के कुछ समय से इस्तेमाल में न होने पर चालू करें
  • किसी तय समयसीमा से पहले या कम से कम देरी से कार्रवाई पूरी करें

उदाहरण के लिए, मीटर न किए जाने वाले नेटवर्क पर अपना टास्क चलाने के लिए, इस तरह का कोड जोड़ा जा सकता है:

Kotlin

val uploadTask: JobInfo = JobInfo.Builder(
        jobId,
        serviceComponent /* JobService component */
).run {
    setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    build()
}
val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
jobScheduler.schedule(uploadTask)

Java

JobInfo uploadTask = new JobInfo.Builder(jobId,
                                         serviceComponent /* JobService component */)
        .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED)
        .build();
JobScheduler jobScheduler =
        (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

अगर डिवाइस में पावर सप्लाई लगातार है (यानी कि उसे दो मिनट से ज़्यादा समय के लिए प्लग-इन किया गया हो और बैटरी की बैटरी अच्छी स्थिति हो), तो सिस्टम शेड्यूल किए गए ऐसे किसी भी काम को चलाएगा जो काम के लिए तैयार है. भले ही, टास्क की तय समयसीमा खत्म न हुई हो.

JobScheduler API का इस्तेमाल करने का उदाहरण देखने के लिए, इस रिलीज़ में JobSchedulerSample को लागू करने का सैंपल देखें.

बैटरी खर्च के लिए डेवलपर टूल

नया dumpsys batterystats कमांड, किसी डिवाइस पर बैटरी खर्च के बारे में दिलचस्प आंकड़ों का डेटा जनरेट करता है. यह डेटा, यूनीक यूज़र आईडी (यूआईडी) के हिसाब से व्यवस्थित होता है. आंकड़ों में ये शामिल हैं:

  • बैटरी से जुड़े इवेंट का इतिहास
  • डिवाइस के लिए दुनिया भर के आंकड़े
  • हर यूआईडी और सिस्टम कॉम्पोनेंट के लिए, बिजली के अनुमानित इस्तेमाल की जानकारी
  • हर ऐप्लिकेशन के हिसाब से मोबाइल मि॰से॰ प्रति पैकेट
  • सिस्टम यूआईडी एग्रीगेट किए गए आंकड़े
  • ऐप्लिकेशन के यूआईडी से जुड़े आंकड़े

आउटपुट को पसंद के मुताबिक बनाने के अलग-अलग विकल्पों के बारे में जानने के लिए, --help विकल्प का इस्तेमाल करें. उदाहरण के लिए, डिवाइस को पिछली बार चार्ज किए जाने के बाद से, किसी ऐप्लिकेशन पैकेज के लिए बैटरी खर्च के आंकड़ों को प्रिंट करने के लिए, यह कमांड चलाएं:

$ adb shell dumpsys batterystats --charged <package-name>

dumpsys कमांड के आउटपुट पर, Battery Historian टूल का इस्तेमाल करके, लॉग से पावर से जुड़े इवेंट का एचटीएमएल विज़ुअलाइज़ेशन जनरेट किया जा सकता है. इस जानकारी की मदद से, बैटरी से जुड़ी किसी भी समस्या को आसानी से समझा और उसका पता लगाया जा सकता है.

Android का इस्तेमाल ऑफ़िस और शिक्षा के लिए करना

प्रबंधित प्रावधानीकरण

Android 5.0, एंटरप्राइज़ एनवायरमेंट में ऐप्लिकेशन चलाने के लिए नई सुविधाएं देता है. अगर उपयोगकर्ता के पास पहले से कोई निजी खाता है, तो डिवाइस एडमिन, डिवाइस पर एक को-प्रज़ेंट लेकिन अलग मैनेज की जा रही प्रोफ़ाइल जोड़ने के लिए, मैनेज किए जा रहे प्रावधान की प्रोसेस शुरू कर सकता है. मैनेज की जा रही प्रोफ़ाइलों से जुड़े ऐप्लिकेशन, उपयोगकर्ता के लॉन्चर, हाल ही में इस्तेमाल किए गए ऐप्लिकेशन की स्क्रीन, और सूचनाओं में, मैनेज नहीं किए जा रहे ऐप्लिकेशन के साथ दिखते हैं.

मैनेज की जा रही डिवाइसों को कॉन्फ़िगर करने की प्रोसेस शुरू करने के लिए, Intent में ACTION_PROVISION_MANAGED_PROFILE भेजें. कॉल हो जाने पर, सिस्टम onProfileProvisioningComplete() कॉलबैक ट्रिगर करता है. इसके बाद, मैनेज की जा रही इस प्रोफ़ाइल को चालू करने के लिए, setProfileEnabled() पर कॉल करें.

मैनेज की जा रही प्रोफ़ाइल में, डिफ़ॉल्ट रूप से ऐप्लिकेशन का सिर्फ़ एक छोटा सबसेट चालू होता है. मैनेज की जा रही प्रोफ़ाइल में अन्य ऐप्लिकेशन इंस्टॉल करने के लिए, enableSystemApp() पर कॉल करें.

अगर लॉन्चर ऐप्लिकेशन डेवलप किया जा रहा है, तो मौजूदा उपयोगकर्ता और उससे जुड़ी मैनेज की जा रही प्रोफ़ाइलों के लिए, लॉन्च की जा सकने वाली गतिविधियों की सूची पाने के लिए, नई LauncherApps क्लास का इस्तेमाल किया जा सकता है. आपका लॉन्चर, ड्रॉ किए जा सकने वाले आइकॉन में वर्क बैज जोड़कर, मैनेज किए जा रहे ऐप्लिकेशन को विज़ुअल तौर पर बेहतर बना सकता है. बैज वाला आइकॉन फिर से पाने के लिए, getUserBadgedIcon() को कॉल करें.

नई सुविधा का इस्तेमाल करने का तरीका जानने के लिए, इस रिलीज़ में BasicManagedProfile लागू करने के सैंपल देखें.

डिवाइस का मालिक

Android 5.0 में, डिवाइस के मालिक के ऐप्लिकेशन को डिप्लॉय करने की सुविधा दी गई है. डिवाइस का मालिक डिवाइस एडमिन का खास तरह का एडमिन होता है, जो सेकंडरी उपयोगकर्ताओं को बनाने और हटाने के साथ-साथ डिवाइस पर ग्लोबल सेटिंग कॉन्फ़िगर करने की अतिरिक्त सुविधा देता है. आपके डिवाइस के मालिक का ऐप्लिकेशन, मैनेज किए जा रहे डिवाइसों पर कॉन्फ़िगरेशन, सुरक्षा, और ऐप्लिकेशन को बेहतर तरीके से कंट्रोल करने के लिए, DevicePolicyManager क्लास में दिए गए तरीकों का इस्तेमाल कर सकता है. किसी डिवाइस का सिर्फ़ एक मालिक हो सकता है.

डिवाइस के मालिक को डिप्लॉय और चालू करने के लिए, आपको किसी प्रोग्रामिंग ऐप्लिकेशन से डिवाइस पर एनएफ़सी डेटा ट्रांसफ़र करना होगा. ऐसा तब करना होगा, जब डिवाइस प्रावधान न किया गया हो. इस डेटा ट्रांसफ़र में वही जानकारी भेजी जाती है जो मैनेज की जा रही प्रोवाइज़निंग में बताए गए प्रोवाइज़निंग इंटेंट में होती है.

स्क्रीन पिन करना

Android 5.0 में, स्क्रीन पिन करने की सुविधा देने वाला नया एपीआई जोड़ा गया है. इसकी मदद से, उपयोगकर्ताओं को कुछ समय के लिए, ऐप्लिकेशन से बाहर निकलने या सूचनाओं से परेशान होने से रोका जा सकता है. उदाहरण के लिए, इसका इस्तेमाल तब किया जा सकता है, जब Android पर ज़्यादा जोखिम वाले आकलन की ज़रूरी शर्तों को पूरा करने के लिए, कोई शिक्षा ऐप्लिकेशन डेवलप किया जा रहा हो. इसके अलावा, इसका इस्तेमाल सिर्फ़ एक काम के लिए या कीऑस्क ऐप्लिकेशन के लिए भी किया जा सकता है. जब आपका ऐप्लिकेशन स्क्रीन पिन करने की सुविधा चालू करता है, तो उपयोगकर्ता तब तक सूचनाएं नहीं देख सकते, दूसरे ऐप्लिकेशन ऐक्सेस नहीं कर सकते या होम स्क्रीन पर नहीं लौट सकते, जब तक आपका ऐप्लिकेशन इस मोड से बाहर नहीं निकल जाता.

स्क्रीन पिन करने की सुविधा को चालू करने के दो तरीके हैं:

  • मैन्युअल तरीके से: उपयोगकर्ता सेटिंग > सुरक्षा > स्क्रीन पिन करें में जाकर, स्क्रीन पिन करने की सुविधा चालू कर सकते हैं. साथ ही, हाल ही में इस्तेमाल किए गए ऐप्लिकेशन की स्क्रीन पर मौजूद हरे रंग के पिन आइकॉन को छूकर, वे टास्क चुन सकते हैं जिन्हें उन्हें पिन करना है.
  • प्रोग्राम के हिसाब से: स्क्रीन पिन करने की सुविधा को प्रोग्राम के हिसाब से चालू करने के लिए, अपने ऐप्लिकेशन से startLockTask() को कॉल करें. अगर अनुरोध करने वाला ऐप्लिकेशन, डिवाइस का मालिक नहीं है, तो उपयोगकर्ता से पुष्टि करने के लिए कहा जाएगा. डिवाइस के मालिक का ऐप्लिकेशन, उपयोगकर्ता की पुष्टि किए बिना ऐप्लिकेशन को पिन करने की सुविधा चालू करने के लिए, setLockTaskPackages() तरीके को कॉल कर सकता है.

टास्क लॉक करने की सुविधा चालू होने पर, ये काम होते हैं:

  • स्टेटस बार खाली है और उपयोगकर्ता की सूचनाएं और स्टेटस की जानकारी छिपी हुई है.
  • होम और हाल ही में इस्तेमाल किए गए ऐप्लिकेशन बटन छिपे हुए हैं.
  • अन्य ऐप्लिकेशन नई गतिविधियां लॉन्च नहीं कर सकते.
  • मौजूदा ऐप्लिकेशन में नई गतिविधियां शुरू की जा सकती हैं. हालांकि, ऐसा तभी किया जा सकता है, जब ऐसा करने से नए टास्क न बने हों.
  • जब डिवाइस का मालिक स्क्रीन पिन करने की सुविधा शुरू करता है, तो उपयोगकर्ता तब तक आपके ऐप्लिकेशन के लिए लॉक रहता है, जब तक कि वह stopLockTask() को कॉल नहीं करता.
  • अगर स्क्रीन पिन करने की सुविधा, डिवाइस के मालिक के अलावा किसी दूसरे ऐप्लिकेशन या उपयोगकर्ता ने चालू की है, तो उपयोगकर्ता 'वापस जाएं' और 'हाल ही में इस्तेमाल किए गए ऐप्लिकेशन', दोनों बटन को दबाकर स्क्रीन से बाहर निकल सकता है.

प्रिंटिंग फ़्रेमवर्क

PDF को बिट मैप के रूप में रेंडर करें

अब PdfRenderer क्लास का इस्तेमाल करके, PDF दस्तावेज़ के पेजों को प्रिंट करने के लिए बिटमैप इमेज में रेंडर किया जा सकता है. आपको एक ऐसा ParcelFileDescriptor तय करना होगा जिस पर सिस्टम, प्रिंट किए जा सकने वाले कॉन्टेंट को लिखता हो. इसका मतलब है कि कॉन्टेंट को किसी भी क्रम में ऐक्सेस किया जा सकता है. आपका ऐप्लिकेशन, openPage() की मदद से रेंडर करने के लिए पेज पा सकता है. इसके बाद, खोले गए PdfRenderer.Page को बिटमैप में बदलने के लिए, render() को कॉल करें. अगर आपको दस्तावेज़ के सिर्फ़ एक हिस्से को बिटमैप इमेज में बदलना है, तो आपके पास अतिरिक्त पैरामीटर सेट करने का विकल्प भी है. उदाहरण के लिए, दस्तावेज़ पर ज़ूम इन करने के लिए, टाइल की गई रेंडरिंग लागू करना.

नए एपीआई इस्तेमाल करने के उदाहरण के लिए, PdfRendererBasic सैंपल देखें.

सिस्टम

ऐप्‍स उपयोग के आंकड़ेatistics

अब android.app.usage एपीआई के नए वर्शन की मदद से, किसी Android डिवाइस पर ऐप्लिकेशन के इस्तेमाल का इतिहास ऐक्सेस किया जा सकता है. यह एपीआई, इस्तेमाल के बारे में ज़्यादा जानकारी देता है. यह जानकारी, अब काम न करने वाले getRecentTasks() तरीके से मिलने वाली जानकारी से अलग है. इस एपीआई का इस्तेमाल करने के लिए, आपको पहले अपने मेनिफ़ेस्ट में "android.permission.PACKAGE_USAGE_STATS" अनुमति का एलान करना होगा. उपयोगकर्ता को सेटिंग > सुरक्षा > ऐप्लिकेशन में जाकर, इस्तेमाल किए जा सकने वाले डेटा का ऐक्सेस भी चालू करना होगा.

यह सिस्टम, हर ऐप्लिकेशन के हिसाब से इस्तेमाल का डेटा इकट्ठा करता है. साथ ही, इस डेटा को हर दिन, हर हफ़्ते, हर महीने, और हर साल के हिसाब से इकट्ठा करता है. ज़्यादा से ज़्यादा समय के लिए सिस्टम इस डेटा को सेव करके रखता है:

  • रोज़ का डेटा: सात दिन
  • हर हफ़्ते का डेटा: चार हफ़्ते
  • हर महीने का डेटा: छह महीने
  • सालाना डेटा: 2 साल

सिस्टम हर ऐप्लिकेशन के लिए, यह डेटा रिकॉर्ड करता है:

  • ऐप्लिकेशन को पिछली बार इस्तेमाल करने की तारीख
  • उस समयावधि के लिए, ऐप्लिकेशन के फ़ोरग्राउंड में रहने का कुल समय (दिन, हफ़्ते, महीने या साल के हिसाब से)
  • टाइमस्टैंप कैप्चर करने की सुविधा, जब कोई कॉम्पोनेंट (पैकेज और गतिविधि के नाम से पहचाना जाता है) किसी दिन के दौरान फ़ोरग्राउंड या बैकग्राउंड में चला जाता है
  • डिवाइस के कॉन्फ़िगरेशन में बदलाव होने पर, टाइमस्टैंप कैप्चर करने वाला टाइमस्टैंप (जैसे, जब डिवाइस के ओरिएंटेशन में बदलाव हुआ हो)

जांच करना और सुलभता

जांच और सुलभता में सुधार

Android 5.0 में जाँच और सुलभता के लिए ये सहायता सुविधाएं जोड़ी गई हैं:

  • getWindowAnimationFrameStats() और getWindowContentFrameStats() के नए तरीके, विंडो के ऐनिमेशन और कॉन्टेंट के फ़्रेम से जुड़े आंकड़े इकट्ठा करते हैं. इन तरीकों की मदद से, इंस्ट्रूमेंटेशन टेस्ट लिखे जा सकते हैं. इससे यह पता चलता है कि कोई ऐप्लिकेशन, उपयोगकर्ता को बेहतर अनुभव देने के लिए, रीफ़्रेश फ़्रीक्वेंसी के हिसाब से फ़्रेम रेंडर कर रहा है या नहीं.
  • इस नए executeShellCommand() इस तरीके की मदद से, अपने इंस्ट्रुमेंटेशन टेस्ट से शेल कमांड लागू किए जा सकते हैं. कमांड को डिवाइस से कनेक्ट किए गए होस्ट से चलाने की प्रक्रिया, adb shell को चलाने की प्रक्रिया से मिलती-जुलती है. इससे आपको dumpsys, am, content, और pm जैसे शेल-आधारित टूल इस्तेमाल करने की सुविधा मिलती है.
  • सुलभता सेवाओं और टेस्ट टूल, जो सुलभता एपीआई (जैसे कि UiAutomator) का इस्तेमाल करते हैं, अब स्क्रीन पर विंडो की उन प्रॉपर्टी के बारे में ज़्यादा जानकारी पा सकते हैं जिन्हें देख चुके उपयोगकर्ता देख सकते हैं. AccessibilityWindowInfo ऑब्जेक्ट की सूची पाने के लिए, getWindows() के नए तरीके को कॉल करें.
  • नई AccessibilityNodeInfo.AccessibilityAction क्लास की मदद से, AccessibilityNodeInfo पर करने के लिए स्टैंडर्ड या कस्टमाइज़ की गई कार्रवाइयां तय की जा सकती हैं. नई AccessibilityNodeInfo.AccessibilityAction क्लास, कार्रवाई से जुड़े उन एपीआई की जगह लेती है जो पहले AccessibilityNodeInfo में मौजूद थे.
  • Android 5.0, आपके ऐप्लिकेशन में लिखाई को बोली में बदलने की सुविधा पर बेहतर कंट्रोल देता है. नई Voice क्लास, आपके ऐप्लिकेशन को खास स्थान-भाषा, क्वालिटी और इंतज़ार के समय की रेटिंग, और लिखाई को बोली में बदलने वाले इंजन के खास पैरामीटर से जुड़ी आवाज़ की प्रोफ़ाइलों का इस्तेमाल करने की अनुमति देती है.

IME

इनपुट भाषाओं के बीच आसानी से स्विच किया जा सकता है

Android 5.0 से, उपयोगकर्ता आसानी से प्लैटफ़ॉर्म पर काम करने वाले सभी इनपुट तरीकों के एडिटर (आईएमई) के बीच स्विच कर सकते हैं. तय की गई स्विच करने की कार्रवाई करने पर (आम तौर पर, सॉफ़्ट कीबोर्ड पर ग्लोब आइकॉन को छूने पर), सभी IME एक-दूसरे के साथ बदल जाते हैं. व्यवहार में यह बदलाव, shouldOfferSwitchingToNextInputMethod() के तरीके से लागू किया जाता है.

इसके अलावा, फ़्रेमवर्क अब यह जांच करता है कि अगले IME में स्विच करने का कोई तरीका है या नहीं. साथ ही, यह भी जांचता है कि वह IME, अगले IME पर स्विच करने की सुविधा देता है या नहीं. स्विच करने की सुविधा वाले IME, बिना स्विच करने की सुविधा वाले IME पर स्विच नहीं करेंगे. व्यवहार में यह बदलाव, switchToNextInputMethod() तरीके से लागू किया जाता है.

अपडेट किए गए IME-switching API का इस्तेमाल करने का उदाहरण देखने के लिए, इस रिलीज़ में अपडेट किए गए सॉफ़्ट-कीबोर्ड के लागू होने के सैंपल देखें. एक IME से दूसरे IME पर स्विच करने के तरीके के बारे में ज़्यादा जानने के लिए, इनपुट मेथड बनाना लेख पढ़ें.

मेनिफ़ेस्ट फ़ाइल

एलान करने लायक ज़रूरी सुविधाएं

अब <uses-feature> एलिमेंट में ये वैल्यू काम करती हैं. इससे यह पक्का किया जा सकता है कि आपका ऐप्लिकेशन सिर्फ़ उन डिवाइसों पर इंस्टॉल किया गया हो जिनमें आपके ऐप्लिकेशन को ज़रूरी सुविधाएं मिलती हैं.

उपयोगकर्ता की अनुमतियां

कुछ एपीआई को ऐक्सेस करने के लिए, आपके ऐप्लिकेशन को जिन अनुमतियों की ज़रूरत होती है उनके एलान करने के लिए, अब <uses-permission> एलिमेंट में यह अनुमति काम करती है.

  • BIND_DREAM_SERVICE: एपीआई लेवल 21 और इसके बाद के वर्शन को टारगेट करते समय, Daydream सेवा को यह अनुमति ज़रूरी है. इससे यह पक्का किया जा सकेगा कि सिर्फ़ सिस्टम ही उससे कनेक्ट कर सके.