Android 6.0 API

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

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

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

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

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

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

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

फ़िंगरप्रिंट की मदद से पुष्टि करना

इस रिलीज़ में नए एपीआई उपलब्ध कराए गए हैं. इनकी मदद से, उन डिवाइसों पर उपयोगकर्ताओं की पुष्टि की जा सकती है जिन पर फ़िंगरप्रिंट स्कैन करने की सुविधा काम करती है. इन एपीआई का इस्तेमाल, Android Keystore system के साथ करें.

फ़िंगरप्रिंट स्कैन करके उपयोगकर्ताओं की पुष्टि करने के लिए, नई FingerprintManager क्लास का इंस्टेंस पाएं और authenticate() तरीके को कॉल करें. आपका ऐप्लिकेशन, फ़िंगरप्रिंट सेंसर वाले ऐसे डिवाइस पर चल रहा हो जिस पर यह सुविधा काम करती है. आपको अपने ऐप्लिकेशन में, फ़िंगरप्रिंट से पुष्टि करने की प्रोसेस के लिए यूज़र इंटरफ़ेस (यूआई) लागू करना होगा. साथ ही, अपने यूआई में Android के स्टैंडर्ड फ़िंगरप्रिंट आइकॉन का इस्तेमाल करना होगा. Android फ़िंगरप्रिंट आइकॉन (c_fp_40px.png), बायोमेट्रिक ऑथेंटिकेशन के सैंपल में शामिल है. अगर आपको फ़िंगरप्रिंट की मदद से पुष्टि करने की सुविधा वाले एक से ज़्यादा ऐप्लिकेशन डेवलप करने हैं, तो ध्यान दें कि हर ऐप्लिकेशन को उपयोगकर्ता के फ़िंगरप्रिंट की पुष्टि अलग से करनी होगी.

अपने ऐप्लिकेशन में इस सुविधा का इस्तेमाल करने के लिए, सबसे पहले अपने मेनिफ़ेस्ट में USE_FINGERPRINT अनुमति जोड़ें.

<uses-permission
        android:name="android.permission.USE_FINGERPRINT" />
फ़िंगरप्रिंट की मदद से पुष्टि करने की सुविधा दिखाने वाला फ़ोन

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

अगर आपको इस सुविधा को आज़माना है, तो यह तरीका अपनाएं:

  1. अगर आपने Android SDK Tools Revision 24.3 इंस्टॉल नहीं किया है, तो इसे इंस्टॉल करें.
  2. एम्युलेटर में नया फ़िंगरप्रिंट रजिस्टर करने के लिए, सेटिंग > सुरक्षा > फ़िंगरप्रिंट पर जाएं. इसके बाद, रजिस्टर करने से जुड़े निर्देशों का पालन करें.
  3. नीचे दिए गए निर्देश का इस्तेमाल करके, फ़िंगरप्रिंट टच इवेंट को एम्युलेट करने के लिए, एम्युलेटर का इस्तेमाल करें. लॉकस्क्रीन या अपने ऐप्लिकेशन पर फ़िंगरप्रिंट टच इवेंट को एम्युलेट करने के लिए, इसी निर्देश का इस्तेमाल करें.
    adb -e emu finger touch <finger_id>
    

    Windows पर, आपको telnet 127.0.0.1 <emulator-id> और फिर finger touch <finger_id> चलाना पड़ सकता है.

क्रेडेंशियल की पुष्टि करें

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

उपयोगकर्ता की पुष्टि हो जाने के बाद, उसी कुंजी का फिर से इस्तेमाल करने के लिए टाइम आउट की अवधि सेट करने के लिए, KeyGenerator या KeyPairGenerator सेट अप करते समय, नए setUserAuthenticationValidityDurationSeconds() तरीके को कॉल करें.

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

ऐप्लिकेशन लिंक करना

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

ऐप्लिकेशन के डेटा का ऑटो बैकअप लिए जाने की सुविधा

अब सिस्टम, ऐप्लिकेशन के पूरे डेटा का अपने-आप बैकअप लेता है और उसे वापस लाता है. इस सुविधा को चालू करने के लिए, आपके ऐप्लिकेशन को Android 6.0 (एपीआई लेवल 23) को टारगेट करना होगा. आपको कोई और कोड जोड़ने की ज़रूरत नहीं है. अगर उपयोगकर्ता अपने Google खाते मिटाते हैं, तो उनका बैकअप लिया गया डेटा भी मिट जाता है. इस सुविधा के काम करने के तरीके और फ़ाइल सिस्टम पर किस डेटा का बैक अप लेना है, यह कॉन्फ़िगर करने के तरीके के बारे में जानने के लिए, ऐप्लिकेशन के लिए ऑटो बैकअप की सुविधा कॉन्फ़िगर करना लेख पढ़ें.

सीधे तौर पर शेयर करने की सुविधा

मोबाइल के निचले हिस्से में डायरेक्ट शेयर की सुविधा दिख रही है

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

डायरेक्ट शेयर टारगेट चालू करने के लिए, आपको एक ऐसी क्लास तय करनी होगी जो ChooserTargetService क्लास को बढ़ाती है. मेनिफ़ेस्ट फ़ाइल में अपनी सेवा के बारे में बताएं. उस एलान में, BIND_CHOOSER_TARGET_SERVICE की अनुमति और SERVICE_INTERFACE ऐक्शन का इस्तेमाल करके इंटेंट फ़िल्टर के बारे में बताएं.

यहां दिए गए उदाहरण में, मेनिफ़ेस्ट में ChooserTargetService को एलान करने का तरीका बताया गया है.

<service android:name=".ChooserTargetService"
        android:label="@string/service_name"
        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
    <intent-filter>
        <action android:name="android.service.chooser.ChooserTargetService" />
    </intent-filter>
</service>

ChooserTargetService को दिखाई जाने वाली हर गतिविधि के लिए, अपने ऐप्लिकेशन के मेनिफ़ेस्ट में <meta-data> एलिमेंट जोड़ें. इसका नाम "android.service.chooser.chooser_target_service" होना चाहिए.

<activity android:name=".MyShareActivity”
        android:label="@string/share_activity_label">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
    </intent-filter>
<meta-data
        android:name="android.service.chooser.chooser_target_service"
        android:value=".ChooserTargetService" />
</activity>

वॉइस इंटरैक्शन

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

ज़्यादातर वॉइस इंटरैक्शन, उपयोगकर्ता की वॉइस ऐक्शन से शुरू होते हैं. हालांकि, आवाज़ से इंटरैक्ट करने की गतिविधि, उपयोगकर्ता के इनपुट के बिना भी शुरू हो सकती है. उदाहरण के लिए, आवाज़ से किए गए इंटरैक्शन के ज़रिए लॉन्च किया गया कोई दूसरा ऐप्लिकेशन भी, आवाज़ से इंटरैक्ट करने का इंटेंट भेज सकता है. यह पता लगाने के लिए कि आपकी गतिविधि, उपयोगकर्ता की आवाज़ से की गई क्वेरी या आवाज़ से इंटरैक्ट करने वाले किसी अन्य ऐप्लिकेशन से शुरू हुई है, isVoiceInteractionRoot() तरीके को कॉल करें. अगर आपकी गतिविधि किसी दूसरे ऐप्लिकेशन ने लॉन्च की है, तो यह तरीका false दिखाता है. इसके बाद, आपका ऐप्लिकेशन उपयोगकर्ता से यह पुष्टि करने के लिए कह सकता है कि उसे यह कार्रवाई करनी है.

आवाज़ से कंट्रोल करने की सुविधा लागू करने के बारे में ज़्यादा जानने के लिए, आवाज़ से कंट्रोल करने की सुविधा के लिए डेवलपर साइट पर जाएं.

Assist API

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

FLAG_SECURE फ़्लैग सेट करके, आपका ऐप्लिकेशन यह तय कर सकता है कि Assistant के साथ मौजूदा कॉन्टेक्स्ट शेयर करना है या नहीं. प्लैटफ़ॉर्म, असिस्टेंट को जानकारी का स्टैंडर्ड सेट पास करता है. इसके अलावा, आपका ऐप्लिकेशन नई AssistContent क्लास का इस्तेमाल करके, अतिरिक्त जानकारी शेयर कर सकता है.

अपने ऐप्लिकेशन से असिस्टेंट को ज़्यादा जानकारी देने के लिए, यह तरीका अपनाएं:

  1. Application.OnProvideAssistDataListener इंटरफ़ेस लागू करें.
  2. registerOnProvideAssistDataListener() का इस्तेमाल करके, इस लिसनर को रजिस्टर करें.
  3. गतिविधि के हिसाब से कॉन्टेक्स्ट के बारे में जानकारी देने के लिए, onProvideAssistData() callback और चाहें, तो नए onProvideAssistContent() callback को बदलें.

एडॉप्टेबल स्टोरेज की सुविधा वाले डिवाइस

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

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

इस सुविधा को डीबग करने के लिए, यूएसबी ड्राइव का इस्तेमाल किया जा सकता है. इसके लिए, आपको इस ड्राइव को यूएसबी ऑन-द-गो (ओटीजी) केबल के ज़रिए Android डिवाइस से कनेक्ट करना होगा. इसके बाद, यह कमांड चलाएं:

$ adb shell sm set-force-adoptable true

सूचनाएं

इस रिलीज़ में, सूचनाओं के लिए एपीआई में ये बदलाव किए गए हैं:

  • INTERRUPTION_FILTER_ALARMS फ़िल्टर का नया लेवल, जो सिर्फ़ अलार्म वाले 'परेशान न करें' मोड से मेल खाता है.
  • CATEGORY_REMINDER कैटगरी की नई वैल्यू. इसका इस्तेमाल, उपयोगकर्ता के शेड्यूल किए गए रिमाइंडर को अन्य इवेंट (CATEGORY_EVENT) और अलार्म (CATEGORY_ALARM) से अलग करने के लिए किया जाता है.
  • नई Icon क्लास, जिसे setSmallIcon() और setLargeIcon() तरीकों से सूचनाओं में अटैच किया जा सकता है. इसी तरह, addAction() तरीके में अब ड्रॉअबल रिसॉर्स आईडी के बजाय Icon ऑब्जेक्ट स्वीकार किया जाता है.
  • getActiveNotifications() का नया तरीका. इससे आपके ऐप्लिकेशन को यह पता चल पाता है कि फ़िलहाल, उनकी कौनसी सूचनाएं चालू हैं.

ब्लूटूथ स्टाइलस इस्तेमाल किया जा सकता है

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

स्टाइलस बटन के इंटरैक्शन का पता लगाने के लिए, MotionEvent तरीकों और कॉन्स्टेंट का इस्तेमाल करें:

  • अगर उपयोगकर्ता, आपके ऐप्लिकेशन की स्क्रीन पर मौजूद बटन से किसी स्टाइलस को छूता है, तो getTooltype() तरीके से TOOL_TYPE_STYLUS वैल्यू मिलती है.
  • Android 6.0 (एपीआई लेवल 23) को टारगेट करने वाले ऐप्लिकेशन के लिए, getButtonState() मेथड, BUTTON_STYLUS_PRIMARY तब दिखाता है, जब उपयोगकर्ता प्राइमरी स्टाइलस बटन दबाता है. अगर स्टाइलस में दूसरा बटन है, तो उपयोगकर्ता के उसे दबाने पर, यह तरीका BUTTON_STYLUS_SECONDARY दिखाता है. अगर उपयोगकर्ता दोनों बटन एक साथ दबाता है, तो यह तरीका दोनों वैल्यू को OR'ed करके दिखाता है (BUTTON_STYLUS_PRIMARY|BUTTON_STYLUS_SECONDARY).
  • अगर कोई ऐप्लिकेशन, प्लैटफ़ॉर्म के पुराने वर्शन को टारगेट कर रहा है, तो getButtonState() तरीके से BUTTON_SECONDARY (स्टाइलस के प्राइमरी बटन को दबाने पर), BUTTON_TERTIARY (स्टाइलस के सेकंडरी बटन को दबाने पर) या दोनों वैल्यू मिलती हैं.

ब्लूटूथ लो एनर्जी स्कैनिंग की सुविधा को बेहतर बनाया गया है

अगर आपका ऐप्लिकेशन, ब्लूटूथ लो एनर्जी स्कैन करता है, तो setCallbackType() नई विधि का इस्तेमाल करके यह बताएं कि आपको सिस्टम से सूचनाएं तब चाहिए, जब उसे पहली बार या लंबे समय बाद, सेट किए गए ScanFilter से मेल खाने वाला कोई विज्ञापन पैकेट मिले. स्कैन करने का यह तरीका, प्लैटफ़ॉर्म के पिछले वर्शन में दिए गए तरीके की तुलना में ज़्यादा बैटरी बचाता है.

Hotspot 2.0 Release 1 के साथ काम करता है

इस रिलीज़ में, Nexus 6 और Nexus 9 डिवाइसों पर Hotspot 2.0 Release 1 स्पेसिफ़िकेशन के लिए सहायता जोड़ी गई है. अपने ऐप्लिकेशन में Hotspot 2.0 क्रेडेंशियल उपलब्ध कराने के लिए, WifiEnterpriseConfig क्लास के नए तरीकों का इस्तेमाल करें. जैसे, setPlmn() और setRealm(). WifiConfiguration ऑब्जेक्ट में, FQDN और providerFriendlyName फ़ील्ड सेट किए जा सकते हैं. नए isPasspointNetwork() तरीके से यह पता चलता है कि पता लगाया गया नेटवर्क, Hotspot 2.0 ऐक्सेस पॉइंट है या नहीं.

4K डिसप्ले मोड

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

ऐप्लिकेशन के चालू होने पर, सिस्टम से ऐप्लिकेशन के फ़िज़िकल रिज़ॉल्यूशन को बदलने का अनुरोध किया जा सकता है. इसके लिए, अपने ऐप्लिकेशन की विंडो की preferredDisplayModeId प्रॉपर्टी सेट करें. अगर आपको 4K डिसप्ले रिज़ॉल्यूशन पर स्विच करना है, तो यह सुविधा आपके काम की है. 4K डिसप्ले मोड में, यूज़र इंटरफ़ेस (यूआई) को ओरिजनल रिज़ॉल्यूशन (जैसे कि 1080 पिक्सल) पर रेंडर किया जाता है और इसे 4K पर अपस्केल किया जाता है. हालांकि, SurfaceView ऑब्जेक्ट, कॉन्टेंट को नेटिव रिज़ॉल्यूशन पर दिखा सकते हैं.

थीम के हिसाब से बदले जा सकने वाले ColorStateLists

अब Android 6.0 (एपीआई लेवल 23) पर चलने वाले डिवाइसों के लिए, ColorStateList में थीम एट्रिब्यूट इस्तेमाल किए जा सकते हैं. Resources.getColorStateList() और Resources.getColor() तरीकों को बंद कर दिया गया है. अगर आपको इन एपीआई को कॉल करना है, तो इसके बजाय नए Context.getColorStateList() या Context.getColor() तरीकों को कॉल करें. ये तरीके, v4 appcompat लाइब्रेरी में भी ContextCompat के ज़रिए उपलब्ध हैं.

ऑडियो से जुड़ी सुविधाएँ

इस रिलीज़ में, Android पर ऑडियो प्रोसेसिंग को बेहतर बनाया गया है. इसमें ये शामिल हैं:

  • नए android.media.midi एपीआई के साथ, MIDI प्रोटोकॉल के लिए सहायता. इन एपीआई का इस्तेमाल करके, MIDI इवेंट भेजे और पाए जा सकते हैं.
  • डिजिटल ऑडियो कैप्चर और प्लेबैक ऑब्जेक्ट बनाने के लिए, नई AudioRecord.Builder और AudioTrack.Builder क्लास. साथ ही, सिस्टम डिफ़ॉल्ट को बदलने के लिए, ऑडियो सोर्स और सिंक प्रॉपर्टी कॉन्फ़िगर करें.
  • ऑडियो और इनपुट डिवाइसों को जोड़ने के लिए एपीआई हुक. यह सुविधा खास तौर पर तब काम आती है, जब आपका ऐप्लिकेशन लोगों को Android TV से कनेक्ट किए गए गेम कंट्रोलर या रिमोट कंट्रोल से वॉइस सर्च करने की सुविधा देता हो. जब कोई उपयोगकर्ता खोज शुरू करता है, तो सिस्टम नए onSearchRequested() कॉलबैक को शुरू करता है. यह पता लगाने के लिए कि उपयोगकर्ता के इनपुट डिवाइस में माइक्रोफ़ोन पहले से मौजूद है या नहीं, उस कॉलबैक से InputDevice ऑब्जेक्ट को वापस पाएं. इसके बाद, नया hasMicrophone() तरीका कॉल करें.
  • getDevices() का नया तरीका. इससे आपको सिस्टम से फ़िलहाल कनेक्ट किए गए सभी ऑडियो डिवाइसों की सूची मिलती है. अगर आपको सिस्टम से यह सूचना चाहिए कि ऑडियो डिवाइस कब कनेक्ट या डिसकनेक्ट हुआ, तो AudioDeviceCallback ऑब्जेक्ट रजिस्टर करें.

वीडियो से जुड़ी सुविधाएं

इस रिलीज़ में, वीडियो प्रोसेसिंग एपीआई में नई सुविधाएं जोड़ी गई हैं. जैसे:

  • नई MediaSync क्लास, जो ऐप्लिकेशन को ऑडियो और वीडियो स्ट्रीम को एक साथ रेंडर करने में मदद करती है. ऑडियो बफ़र, नॉन-ब्लॉकिंग तरीके से सबमिट किए जाते हैं. साथ ही, इन्हें कॉलबैक के ज़रिए वापस भेजा जाता है. इसमें वीडियो चलाने की स्पीड को डाइनैमिक तरीके से बदलने की सुविधा भी काम करती है.
  • नया EVENT_SESSION_RECLAIMED इवेंट. इससे पता चलता है कि ऐप्लिकेशन से खोले गए सेशन को संसाधन मैनेजर ने वापस ले लिया है. अगर आपका ऐप्लिकेशन DRM सेशन का इस्तेमाल करता है, तो आपको इस इवेंट को मैनेज करना चाहिए. साथ ही, यह पक्का करना चाहिए कि वापस लिए गए सेशन का इस्तेमाल न किया जाए.
  • नया ERROR_RECLAIMED गड़बड़ी कोड. इससे पता चलता है कि रिसॉर्स मैनेजर ने कोडेक के इस्तेमाल किए गए मीडिया रिसॉर्स को वापस ले लिया है. इस अपवाद के साथ, कोडेक को रिलीज़ करना होगा, क्योंकि यह टर्मिनल स्टेट में चला गया है.
  • सपोर्ट किए गए कोडेक के ज़्यादा से ज़्यादा इंस्टेंस के बारे में जानकारी पाने के लिए, नया getMaxSupportedInstances() इंटरफ़ेस.
  • तेज़ या स्लो मोशन में मीडिया चलाने की स्पीड सेट करने के लिए, नया setPlaybackParams() तरीका. यह वीडियो के साथ-साथ, ऑडियो को अपने-आप स्ट्रेच या तेज़ कर देता है.

कैमरे की सुविधाएं

इस रिलीज़ में, कैमरे की फ़्लैशलाइट को ऐक्सेस करने और इमेज को फिर से प्रोसेस करने के लिए, ये नए एपीआई शामिल हैं:

Flashlight API

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

registerTorchCallback() तरीके को कॉल करके, टॉर्च मोड की स्थिति के बारे में सूचना पाने के लिए कॉलबैक रजिस्टर किया जा सकता है. जब पहली बार कॉलबैक रजिस्टर किया जाता है, तो उसे तुरंत कॉल किया जाता है. इसमें फ़्लैश यूनिट वाले सभी मौजूदा कैमरा डिवाइसों के टॉर्च मोड की स्थिति शामिल होती है. अगर टॉर्च मोड को चालू या बंद किया जाता है, तो onTorchModeChanged() वाला तरीका लागू होता है.

Reprocessing API

Camera2 एपीआई को YUV और निजी अपारदर्शी फ़ॉर्मैट वाली इमेज को फिर से प्रोसेस करने के लिए बढ़ाया गया है. यह पता लगाने के लिए कि फिर से प्रोसेस करने की ये सुविधाएं उपलब्ध हैं या नहीं, getCameraCharacteristics() को कॉल करें और REPROCESS_MAX_CAPTURE_STALL कुंजी देखें. अगर कोई डिवाइस फिर से प्रोसेस करने की सुविधा के साथ काम करता है, तो createReprocessableCaptureSession() को कॉल करके, फिर से प्रोसेस किए जा सकने वाले कैमरे का कैप्चर सेशन बनाया जा सकता है. साथ ही, इनपुट बफ़र को फिर से प्रोसेस करने के लिए अनुरोध बनाए जा सकते हैं.

इनपुट बफ़र फ़्लो को कैमरे के रीप्रोसेसिंग इनपुट से कनेक्ट करने के लिए, ImageWriter क्लास का इस्तेमाल करें. बिना डेटा वाला बफ़र पाने के लिए, इस प्रोग्रामिंग मॉडल का इस्तेमाल करें:

  1. dequeueInputImage() तरीके को कॉल करें.
  2. इनपुट बफ़र में डेटा भरें.
  3. queueInputImage() तरीके को कॉल करके, बफ़र को कैमरे पर भेजें.

अगर ImageWriter ऑब्जेक्ट के साथ PRIVATE इमेज का इस्तेमाल किया जा रहा है, तो आपका ऐप्लिकेशन सीधे तौर पर इमेज डेटा को ऐक्सेस नहीं कर सकता. इसके बजाय, PRIVATE इमेज को सीधे ImageWriter पर भेजें. इसके लिए, बफ़र कॉपी किए बिना queueInputImage() तरीके का इस्तेमाल करें.

ImageReader क्लास अब PRIVATE फ़ॉर्मैट वाली इमेज स्ट्रीम के साथ काम करती है. इस सुविधा की मदद से, आपका ऐप्लिकेशन ImageReader आउटपुट इमेज की एक सर्कुलर इमेज क्यू बनाए रख सकता है. साथ ही, एक या उससे ज़्यादा इमेज चुन सकता है और उन्हें कैमरे से फिर से प्रोसेस करने के लिए ImageWriter को भेज सकता है.

Android for Work की सुविधाएं

इस रिलीज़ में, Android for Work के लिए ये नए एपीआई शामिल हैं:

  • कंपनी के मालिकाना हक वाले, एक ही काम के लिए इस्तेमाल होने वाले डिवाइसों के लिए बेहतर कंट्रोल: डिवाइस का मालिक अब इन सेटिंग को कंट्रोल कर सकता है, ताकि कंपनी के मालिकाना हक वाले, एक ही काम के लिए इस्तेमाल होने वाले (सीओएसयू) डिवाइसों को बेहतर तरीके से मैनेज किया जा सके:
    • setKeyguardDisabled() तरीके का इस्तेमाल करके, कीगार्ड को बंद या फिर से चालू करें.
    • setStatusBarDisabled() तरीके का इस्तेमाल करके, स्टेटस बार को बंद या फिर से चालू करें. इसमें क्विक सेटिंग, सूचनाएं, और ऊपर की ओर स्वाइप करने का नेविगेशन जेस्चर शामिल है, जो Google Now को लॉन्च करता है.
    • UserManager कॉन्स्टेंट DISALLOW_SAFE_BOOT का इस्तेमाल करके, सुरक्षित बूट की सुविधा को बंद या फिर से चालू करें.
    • STAY_ON_WHILE_PLUGGED_IN कॉन्स्टेंट का इस्तेमाल करके, डिवाइस को प्लग इन करने पर स्क्रीन को बंद होने से रोकें.
  • डिवाइस के मालिक के पास, ऐप्लिकेशन को साइलेंट मोड में इंस्टॉल और अनइंस्टॉल करने का विकल्प: डिवाइस का मालिक अब PackageInstaller एपीआई का इस्तेमाल करके, ऐप्लिकेशन को साइलेंट मोड में इंस्टॉल और अनइंस्टॉल कर सकता है. इसके लिए, Google Play for Work का इस्तेमाल करना ज़रूरी नहीं है. अब डिवाइसों को डिवाइस के मालिक के ज़रिए उपलब्ध कराया जा सकता है. यह डिवाइस का मालिक, उपयोगकर्ता के इंटरैक्शन के बिना ऐप्लिकेशन फ़ेच और इंस्टॉल करता है. यह सुविधा, Google खाता चालू किए बिना कीऑस्क या इस तरह के अन्य डिवाइसों पर एक बार में प्रोविज़निंग की सुविधा चालू करने के लिए काम आती है.
  • साइलेंट एंटरप्राइज़ सर्टिफ़िकेट ऐक्सेस: जब कोई ऐप्लिकेशनchoosePrivateKeyAlias(), उपयोगकर्ता को सर्टिफ़िकेट चुनने के लिए कहेगा, तब प्रोफ़ाइल या डिवाइस का मालिक onChoosePrivateKeyAlias() मेथड को कॉल कर सकता है. इससे, अनुरोध करने वाले ऐप्लिकेशन को बिना किसी सूचना के एलियास मिल जाएगा. इस सुविधा की मदद से, मैनेज किए जा रहे ऐप्लिकेशन को उपयोगकर्ता के इंटरैक्शन के बिना सर्टिफ़िकेट का ऐक्सेस दिया जा सकता है.
  • सिस्टम अपडेट अपने-आप स्वीकार होने की सुविधा. setSystemUpdatePolicy() की मदद से सिस्टम अपडेट की नीति सेट करके, डिवाइस का मालिक अब सिस्टम अपडेट को अपने-आप स्वीकार कर सकता है. उदाहरण के लिए, कीऑस्क डिवाइस के मामले में ऐसा किया जा सकता है. इसके अलावा, वह अपडेट को 30 दिनों तक के लिए टाल सकता है और उपयोगकर्ता को इसे लेने से रोक सकता है. इसके अलावा, एडमिन हर दिन के लिए एक समयसीमा सेट कर सकता है. इस दौरान अपडेट इंस्टॉल करना ज़रूरी होता है. उदाहरण के लिए, जब कियॉस्क डिवाइस का इस्तेमाल न किया जा रहा हो. सिस्टम अपडेट उपलब्ध होने पर, सिस्टम यह देखता है कि डिवाइस नीति कंट्रोलर ऐप्लिकेशन ने सिस्टम अपडेट की नीति सेट की है या नहीं. इसके बाद, वह उसी के मुताबिक काम करता है.
  • सर्टिफ़िकेट इंस्टॉल करने का अधिकार सौंपना: अब प्रोफ़ाइल या डिवाइस का मालिक, तीसरे पक्ष के किसी ऐप्लिकेशन को ये DevicePolicyManager सर्टिफ़िकेट मैनेजमेंट एपीआई कॉल करने की अनुमति दे सकता है:
  • Android for Work में, ऑफ़िस के काम की स्थिति से जुड़ी सूचनाएं दिखाने की सुविधा वाला मोबाइल
  • डेटा खर्च को ट्रैक करना. प्रोफ़ाइल या डिवाइस का मालिक, अब NetworkStatsManager नए तरीकों का इस्तेमाल करके, सेटिंग > डेटा में दिखने वाले डेटा खर्च से जुड़े आंकड़ों के बारे में क्वेरी कर सकता है. प्रोफ़ाइल के मालिकों को, मैनेज की जा रही प्रोफ़ाइल पर क्वेरी करने की अनुमति अपने-आप मिल जाती है. वहीं, डिवाइस के मालिकों को मैनेज किए जा रहे प्राइमरी यूज़र के इस्तेमाल का डेटा ऐक्सेस करने की अनुमति मिलती है.
  • रनटाइम अनुमतियों का मैनेजमेंट:

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

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