Android 6.0 के बदलाव

नई सुविधाओं और क्षमताओं के साथ-साथ, Android 6.0 (एपीआई लेवल 23) में सिस्टम में कई तरह के बदलाव और एपीआई के काम करने के तरीके में बदलाव किए गए हैं. इस दस्तावेज़ में, कुछ ऐसे अहम बदलावों के बारे में बताया गया है जिन्हें आपको समझना चाहिए और अपने ऐप्लिकेशन में इनका ध्यान रखना चाहिए.

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

रनटाइम की अनुमतियां

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

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

अपने ऐप्लिकेशन में अनुमतियों के नए मॉडल का इस्तेमाल करने के बारे में जानने के लिए, सिस्टम की अनुमतियों के साथ काम करना लेख पढ़ें. अपने ऐप्लिकेशन पर पड़ने वाले असर का आकलन करने के बारे में सलाह पाने के लिए, अनुमतियों के इस्तेमाल से जुड़े नोट देखें.

बैटरी बचाने की सुविधा (डोज़) और ऐप्लिकेशन स्टैंडबाय

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

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

बैटरी बचाने वाले इन बदलावों के बारे में ज़्यादा जानने के लिए, Doze मोड और ऐप्लिकेशन के स्टैंडबाय मोड के लिए ऑप्टिमाइज़ करना लेख पढ़ें.

Apache HTTP क्लाइंट को हटाना

Android 6.0 रिलीज़ में, Apache HTTP क्लाइंट के लिए सहायता हटा दी गई है. अगर आपका ऐप्लिकेशन इस क्लाइंट का इस्तेमाल कर रहा है और Android 2.3 (एपीआई लेवल 9) या उसके बाद के वर्शन को टारगेट करता है, तो इसके बजाय HttpURLConnection क्लास का इस्तेमाल करें. यह एपीआई ज़्यादा बेहतर है, क्योंकि यह ट्रांसफ़र किए जाने वाले डेटा को कम करने और रिस्पॉन्स को कैश मेमोरी में सेव करने के लिए, नेटवर्क का इस्तेमाल कम करता है. साथ ही, इससे बैटरी की खपत भी कम होती है. Apache HTTP API का इस्तेमाल जारी रखने के लिए, आपको सबसे पहले अपनी build.gradle फ़ाइल में, कंपाइल-टाइम डिपेंडेंसी के बारे में एलान करना होगा:

android {
    useLibrary 'org.apache.http.legacy'
}

BoringSSL

Android, OpenSSL से BoringSSL लाइब्रेरी पर स्विच कर रहा है. अगर आपके ऐप्लिकेशन में Android NDK का इस्तेमाल किया जा रहा है, तो क्रिप्टोग्राफ़िक लाइब्रेरी के साथ लिंक न करें. ये लाइब्रेरी, NDK API का हिस्सा नहीं होतीं. जैसे, libcrypto.so और libssl.so. ये लाइब्रेरी, सार्वजनिक एपीआई नहीं हैं. साथ ही, सभी रिलीज़ और डिवाइसों पर बिना किसी सूचना के इन्हें बदला या बंद किया जा सकता है. इसके अलावा, आपको सुरक्षा से जुड़ी समस्याओं का सामना करना पड़ सकता है. इसके बजाय, अपने नेटिव कोड में बदलाव करें, ताकि JNI के ज़रिए Java क्रिप्टोग्राफ़ी एपीआई को कॉल किया जा सके या अपनी पसंद की क्रिप्टोग्राफ़ी लाइब्रेरी से स्टैटिक रूप से लिंक किया जा सके.

हार्डवेयर आइडेंटिफ़ायर का ऐक्सेस

उपयोगकर्ताओं को बेहतर डेटा सुरक्षा देने के लिए, इस रिलीज़ से Android, वाई-फ़ाई और ब्लूटूथ एपीआई का इस्तेमाल करने वाले ऐप्लिकेशन के लिए, डिवाइस के लोकल हार्डवेयर आइडेंटिफ़ायर के प्रोग्राम के ऐक्सेस को हटा देता है. WifiInfo.getMacAddress() और BluetoothAdapter.getAddress() तरीकों से अब 02:00:00:00:00:00 की कॉन्स्टेंट वैल्यू मिलती है.

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

ध्यान दें: जब Android 6.0 (एपीआई लेवल 23) पर काम करने वाला कोई डिवाइस, बैकग्राउंड में वाई-फ़ाई या ब्लूटूथ स्कैन शुरू करता है, तो बाहरी डिवाइसों को यह गतिविधि, किसी रैंडम मैक पते से शुरू होने वाली गतिविधि के तौर पर दिखती है.

सूचनाएं

यह रिलीज़, Notification.setLatestEventInfo() तरीके को हटा देती है. सूचनाएं बनाने के लिए, Notification.Builder क्लास का इस्तेमाल करें. किसी सूचना को बार-बार अपडेट करने के लिए, Notification.Builder इंस्टेंस का फिर से इस्तेमाल करें. अपडेट किए गए Notification इंस्टेंस पाने के लिए, build() वाले तरीके को कॉल करें.

adb shell dumpsys notification निर्देश अब आपकी सूचना के टेक्स्ट को प्रिंट नहीं करता है. सूचना ऑब्जेक्ट में टेक्स्ट को प्रिंट करने के लिए, adb shell dumpsys notification --noredact कमांड का इस्तेमाल करें.

AudioManager में हुए बदलाव

AudioManager क्लास की मदद से, वॉल्यूम को सीधे सेट करने या किसी स्ट्रीम को म्यूट करने की सुविधा अब काम नहीं करती. setStreamSolo() तरीका अब काम नहीं करता. इसके बजाय, आपको requestAudioFocus() तरीका इस्तेमाल करना चाहिए. इसी तरह, setStreamMute() तरीका अब काम नहीं करता. इसके बजाय, adjustStreamVolume() तरीका इस्तेमाल करें और निर्देश की वैल्यू ADJUST_MUTE या ADJUST_UNMUTE डालें.

टेक्स्ट चुनना

फ़्लोटिंग टूलबार में टेक्स्ट चुनने की नई सुविधाएं दिख रही हैं

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

टेक्स्ट चुनने के लिए फ़्लोटिंग टूलबार लागू करने के लिए, अपने मौजूदा ऐप्लिकेशन में ये बदलाव करें:

  1. अपने View या Activity ऑब्जेक्ट में, अपने ActionMode कॉल को startActionMode(Callback) से startActionMode(Callback, ActionMode.TYPE_FLOATING) पर बदलें.
  2. ActionMode.Callback के मौजूदा लागू होने के तरीके को बदलकर, इसे ActionMode.Callback2 के लिए इस्तेमाल करें.
  3. व्यू में, कॉन्टेंट Rect ऑब्जेक्ट (जैसे कि टेक्स्ट चुनने वाला रेक्टैंगल) के निर्देशांक देने के लिए, onGetContentRect() तरीके को बदलें.
  4. अगर आयत की पोज़िशनिंग अब मान्य नहीं है और सिर्फ़ यही एलिमेंट अमान्य है, तो invalidateContentRect() तरीके को कॉल करें.

अगर Android Support Library के 22.2 वर्शन का इस्तेमाल किया जा रहा है, तो ध्यान रखें कि फ़्लोटिंग टूलबार, पुराने सिस्टम के साथ काम नहीं करते. साथ ही, appcompat डिफ़ॉल्ट रूप से ActionMode ऑब्जेक्ट को कंट्रोल करता है. यह फ़्लोटिंग टूलबार को दिखने से रोकता है. AppCompatActivity में ActionMode सहायता चालू करने के लिए, getDelegate() को कॉल करें. इसके बाद, दिखाए गए AppCompatDelegate ऑब्जेक्ट पर setHandleNativeActionModesEnabled() को कॉल करें और इनपुट पैरामीटर को false पर सेट करें. यह कॉल, ActionMode ऑब्जेक्ट का कंट्रोल, फ़्रेमवर्क को वापस कर देता है. Android 6.0 (एपीआई लेवल 23) पर काम करने वाले डिवाइसों में, फ़्रेमवर्क ActionBar या फ़्लोटिंग टूलबार मोड के साथ काम करता है. वहीं, Android 5.1 (एपीआई लेवल 22) या उससे पहले के वर्शन पर काम करने वाले डिवाइसों में, सिर्फ़ ActionBar मोड काम करते हैं.

ब्राउज़र के बुकमार्क में बदलाव

इस रिलीज़ में, ग्लोबल बुकमार्क की सुविधा हटा दी गई है. android.provider.Browser.getAllBookmarks() और android.provider.Browser.saveBookmark() के तरीके अब हटा दिए गए हैं. इसी तरह, READ_HISTORY_BOOKMARKS और WRITE_HISTORY_BOOKMARKS की अनुमतियां हटा दी जाती हैं. अगर आपका ऐप्लिकेशन Android 6.0 (एपीआई लेवल 23) या उसके बाद के वर्शन को टारगेट करता है, तो ग्लोबल सेवा देने वाली कंपनी से ब्राउज़र के बुकमार्क ऐक्सेस न करें या बुकमार्क की अनुमतियों का इस्तेमाल न करें. इसके बजाय, आपके ऐप्लिकेशन को ब्राउज़र के बजाय, अपने अंदर ब्राउज़िंग डेटा सेव करना चाहिए.

Android कीस्टोर में हुए बदलाव

इस रिलीज़ के बाद, Android कीस्टोर की सेवा देने वाली कंपनी, अब डीएसए के साथ काम नहीं करेगी. ECDSA का इस्तेमाल अब भी किया जा सकता है.

सुरक्षित लॉक स्क्रीन बंद या रीसेट होने पर (उदाहरण के लिए, उपयोगकर्ता या डिवाइस एडमिन की ओर से) उन कुंजियों को मिटाया नहीं जाएगा जिनके लिए इनऐक्टिव लॉक स्क्रीन की ज़रूरत नहीं होती. जिन पासकोड को 'स्टोर किए गए पासकोड' के तौर पर एन्क्रिप्ट (सुरक्षित) करना ज़रूरी है उन्हें इन इवेंट के दौरान मिटा दिया जाएगा.

वाई-फ़ाई और नेटवर्क से जुड़े बदलाव

इस रिलीज़ में, वाई-फ़ाई और नेटवर्किंग एपीआई के काम करने के तरीके में ये बदलाव किए गए हैं.

  • अब आपके ऐप्लिकेशन WifiConfiguration ऑब्जेक्ट की स्थिति सिर्फ़ तब ही बदल सकते हैं, जब आपने इन ऑब्जेक्ट को बनाया हो. आपके पास, उपयोगकर्ता या अन्य ऐप्लिकेशन के बनाए गए WifiConfiguration ऑब्जेक्ट में बदलाव करने या उन्हें मिटाने की अनुमति नहीं है.
  • पहले, अगर कोई ऐप्लिकेशन disableAllOthers=true सेटिंग के साथ enableNetwork() का इस्तेमाल करके, डिवाइस को किसी खास वाई-फ़ाई नेटवर्क से कनेक्ट करने के लिए मजबूर करता था, तो डिवाइस मोबाइल डेटा जैसे अन्य नेटवर्क से डिसकनेक्ट हो जाता था. इस रिलीज़ में, डिवाइस अब ऐसे अन्य नेटवर्क से डिसकनेक्ट नहीं होता. अगर आपके ऐप्लिकेशन का targetSdkVersion “20” या उससे कम है, तो उसे चुने गए वाई-फ़ाई नेटवर्क पर पिन किया जाता है. अगर आपके ऐप्लिकेशन का targetSdkVersion “21” या उससे ज़्यादा है, तो कई नेटवर्क वाले एपीआई (जैसे कि openConnection(), bindSocket(), और नया bindProcessToNetwork() तरीका) का इस्तेमाल करें. इससे यह पक्का किया जा सकेगा कि उसका नेटवर्क ट्रैफ़िक, चुने गए नेटवर्क पर भेजा जाए.

कैमरा सेवा में हुए बदलाव

इस रिलीज़ में, कैमरा सेवा में शेयर किए गए संसाधनों को ऐक्सेस करने के मॉडल को पिछले “पहले आओ, पहले पाओ” वाले ऐक्सेस मॉडल से बदलकर, ऐसे ऐक्सेस मॉडल में बदल दिया गया है जिसमें ज़्यादा प्राथमिकता वाली प्रोसेस को प्राथमिकता दी जाती है. सेवा के काम करने के तरीके में हुए बदलावों में ये शामिल हैं:

  • क्लाइंट ऐप्लिकेशन प्रोसेस की “प्राथमिकता” के आधार पर, कैमरा सबसिस्टम के संसाधनों का ऐक्सेस दिया जाता है. इन संसाधनों में, कैमरा डिवाइस को खोलना और कॉन्फ़िगर करना शामिल है. आम तौर पर, उपयोगकर्ता को दिखने वाली या फ़ोरग्राउंड गतिविधियों वाली ऐप्लिकेशन प्रोसेस को ज़्यादा प्राथमिकता दी जाती है. इससे कैमरे के संसाधन हासिल करने और उसका इस्तेमाल करने की प्रोसेस ज़्यादा भरोसेमंद हो जाती है.
  • जब ज़्यादा प्राथमिकता वाला ऐप्लिकेशन कैमरे का इस्तेमाल करने की कोशिश करता है, तो कम प्राथमिकता वाले ऐप्लिकेशन के लिए चालू कैमरा क्लाइंट को “हटाया” जा सकता है. बंद किए गए Camera एपीआई में, ऐसा करने पर, हटाए गए क्लाइंट के लिए onError() को कॉल किया जाता है. Camera2 एपीआई में, इससे हटाए गए क्लाइंट के लिए onDisconnected() को कॉल किया जाता है.
  • सही कैमरा हार्डवेयर वाले डिवाइसों पर, अलग-अलग ऐप्लिकेशन प्रोसेस अलग-अलग कैमरा डिवाइस को एक साथ खोल सकती हैं और उनका इस्तेमाल कर सकती हैं. हालांकि, कैमरा सेवा अब उन मामलों का पता लगाती है और उन्हें अनुमति नहीं देती है जहां एक साथ कई प्रोसेस में कैमरे का इस्तेमाल किया जा रहा हो और इससे किसी भी खुले कैमरे डिवाइस की परफ़ॉर्मेंस या सुविधाओं में काफ़ी गिरावट आ रही हो. इस बदलाव की वजह से, कम प्राथमिकता वाले क्लाइंट को "हटाया" जा सकता है. ऐसा तब भी हो सकता है, जब कोई दूसरा ऐप्लिकेशन सीधे तौर पर उसी कैमरा डिवाइस को ऐक्सेस न कर रहा हो.
  • मौजूदा उपयोगकर्ता को बदलने पर, पिछले उपयोगकर्ता खाते के मालिकाना हक वाले ऐप्लिकेशन में मौजूद चालू कैमरा क्लाइंट हटा दिए जाते हैं. कैमरे का ऐक्सेस, सिर्फ़ उन उपयोगकर्ता प्रोफ़ाइलों तक सीमित है जिनका मालिकाना हक, डिवाइस के मौजूदा उपयोगकर्ता के पास है. इसका मतलब यह है कि उदाहरण के लिए, “मेहमान” खाता, कैमरा सबसिस्टम का इस्तेमाल करने वाली प्रोसेस को बंद नहीं कर सकता. ऐसा तब होता है, जब उपयोगकर्ता किसी दूसरे खाते पर स्विच करता है.

रनटाइम

ART रनटाइम अब newInstance() तरीके के लिए, ऐक्सेस से जुड़े नियमों को सही तरीके से लागू करता है. इस बदलाव से, उस समस्या को ठीक किया गया है जिसमें Dalvik, पिछले वर्शन में ऐक्सेस के नियमों की गलत तरीके से जांच कर रहा था. अगर आपका ऐप्लिकेशन newInstance() तरीके का इस्तेमाल करता है और आपको ऐक्सेस की जांच को बदलना है, तो setAccessible() तरीके को इनपुट पैरामीटर के साथ true पर सेट करें. अगर आपका ऐप्लिकेशन, v7 appcompat लाइब्रेरी या v7 recyclerview लाइब्रेरी का इस्तेमाल करता है, तो आपको इन लाइब्रेरी के नए वर्शन का इस्तेमाल करने के लिए, अपने ऐप्लिकेशन को अपडेट करना होगा. अगर ऐसा नहीं है, तो पक्का करें कि एक्सएमएल से रेफ़र की गई सभी कस्टम क्लास अपडेट की गई हों, ताकि उनकी क्लास कन्स्ट्रक्टर ऐक्सेस की जा सकें.

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

dlopen(3) RTLD_LOCAL फ़्लैग अब सही तरीके से लागू किया गया है. ध्यान दें कि RTLD_LOCAL डिफ़ॉल्ट है. इसलिए, खास तौर पर RTLD_LOCAL का इस्तेमाल न करने वाले कॉल पर असर पड़ेगा (जब तक कि आपके ऐप्लिकेशन में साफ़ तौर पर RTLD_GLOBAL का इस्तेमाल न किया गया हो). RTLD_LOCAL का इस्तेमाल करने पर, dlopen(3) को किए जाने वाले बाद के कॉल की मदद से लोड की गई लाइब्रेरी में सिंबल उपलब्ध नहीं कराए जाएंगे. हालांकि, DT_NEEDED एंट्री के रेफ़रंस नहीं दिए जाएंगे.dlopen(3)

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

APK की पुष्टि करना

अब प्लैटफ़ॉर्म, APK की पुष्टि ज़्यादा सख्ती से करता है. अगर किसी फ़ाइल के बारे में मेनिफ़ेस्ट में बताया गया है, लेकिन वह APK में मौजूद नहीं है, तो APK को गड़बड़ी वाला माना जाता है. अगर कोई भी कॉन्टेंट हटा दिया जाता है, तो APK पर फिर से साइन करना होगा.

यूएसबी कनेक्शन

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

Android for Work में हुए बदलाव

इस रिलीज़ में Android for Work के लिए निम्न व्यवहार बदलाव शामिल हैं:

  • निजी बातचीत में, वर्क प्रोफ़ाइल में सेव किए गए संपर्कों को शामिल करना. Google Dialer के कॉल लॉग में, अब उपयोगकर्ता को पिछले कॉल के साथ-साथ काम से जुड़े संपर्क भी दिखेंगे. setCrossProfileCallerIdDisabled() को true पर सेट करने से, Google Dialer के कॉल लॉग में वर्क प्रोफ़ाइल के संपर्क छिप जाते हैं. काम से जुड़े संपर्कों को, ब्लूटूथ की मदद से डिवाइसों पर निजी संपर्कों के साथ तब ही दिखाया जा सकता है, जब आपने setBluetoothContactSharingDisabled() को false पर सेट किया हो. डिफ़ॉल्ट रूप से, यह true पर सेट होता है.
  • वाई-फ़ाई कॉन्फ़िगरेशन हटाना: अगर वर्क प्रोफ़ाइल मिटाई जाती है, तो प्रोफ़ाइल के मालिक ने जोड़े गए वाई-फ़ाई कॉन्फ़िगरेशन (उदाहरण के लिए, addNetwork() तरीके से कॉल करके) अब हटा दिए जाते हैं.
  • वाई-फ़ाई कॉन्फ़िगरेशन लॉकडाउन: अगर WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN शून्य से ज़्यादा है, तो डिवाइस के चालू मालिक ने जो भी वाई-फ़ाई कॉन्फ़िगरेशन बनाया है उसमें उपयोगकर्ता बदलाव नहीं कर सकता या उसे मिटा नहीं सकता. उपयोगकर्ता अब भी अपने वाई-फ़ाई कॉन्फ़िगरेशन बना सकता है और उनमें बदलाव कर सकता है. ऐक्टिव डिवाइस मालिक के पास किसी भी वाई-फ़ाई कॉन्फ़िगरेशन में बदलाव करने या उसे हटाने का विकल्प होता है. इसमें, ऐसे कॉन्फ़िगरेशन भी शामिल हैं जिन्हें उन्होंने खुद नहीं बनाया है.
  • Google खाते को जोड़कर डिवाइस नीति नियंत्रक डाउनलोड करें: जब किसी ऐसे Google खाते को डिवाइस नीति नियंत्रक (DPC) ऐप्लिकेशन के ज़रिए मैनेज करने की ज़रूरत होती है जिसे मैनेज किए जा रहे कॉन्टेक्स्ट के बाहर के डिवाइस में जोड़ा जाता है, तो खाता जोड़ने का फ़्लो अब उपयोगकर्ता को सही WPC इंस्टॉल करने का निर्देश देता है. यह सुविधा, सेटिंग > खाते और डिवाइस के शुरुआती सेटअप विज़र्ड की मदद से जोड़े गए खातों पर भी लागू होती है.
  • DevicePolicyManager एपीआई के कुछ खास काम करने के तरीके में बदलाव:
    • setCameraDisabled() तरीका इस्तेमाल करने पर, सिर्फ़ कॉल करने वाले उपयोगकर्ता के कैमरे पर असर पड़ता है. मैनेज की जा रही प्रोफ़ाइल से कॉल करने पर, प्राइमरी उपयोगकर्ता के कैमरे पर असर नहीं पड़ता.
    • इसके अलावा, setKeyguardDisabledFeatures() तरीका अब प्रोफ़ाइल के मालिकों के साथ-साथ डिवाइस के मालिकों के लिए भी उपलब्ध है.
    • प्रोफ़ाइल का मालिक, कीवर्ड गार्ड पर ये पाबंदियां सेट कर सकता है:
      • KEYGUARD_DISABLE_TRUST_AGENTS और KEYGUARD_DISABLE_FINGERPRINT, जो प्रोफ़ाइल के पैरंट उपयोगकर्ता की कीगार्ड सेटिंग पर असर डालते हैं.
      • KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS, जिसका असर सिर्फ़ मैनेज की जा रही प्रोफ़ाइल में मौजूद ऐप्लिकेशन से जनरेट होने वाली सूचनाओं पर पड़ता है.
    • DevicePolicyManager.createAndInitializeUser() और DevicePolicyManager.createUser() तरीके अब काम नहीं करते.
    • setScreenCaptureDisabled() तरीका अब उस समय भी सहायता स्ट्रक्चर को ब्लॉक करता है, जब उपयोगकर्ता का कोई ऐप्लिकेशन फ़ोरग्राउंड में हो.
    • EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM अब डिफ़ॉल्ट रूप से SHA-256 का इस्तेमाल किया जाता है. SHA-1 अब भी पुराने सिस्टम के साथ काम करता है. हालांकि, आने वाले समय में इसे हटा दिया जाएगा. EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM अब सिर्फ़ SHA-256 का इस्तेमाल किया जा सकता है.
    • Android 6.0 (एपीआई लेवल 23) में मौजूद, डिवाइस को शुरू करने वाले एपीआई अब हटा दिए गए हैं.
    • EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS को हटा दिया गया है, ताकि एनएफ़सी बंप प्रोवाइज़निंग, प्रोग्राम के हिसाब से फ़ैक्ट्री रीसेट की सुरक्षा वाले डिवाइस को अनलॉक न कर सके.
    • अब मैनेज किए जा रहे डिवाइस के एनएफ़सी प्रोवाइज़न के दौरान, डिवाइस के मालिक के ऐप्लिकेशन को डेटा भेजने के लिए, EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE extra का इस्तेमाल किया जा सकता है.
    • Android for Work API, M वर्शन के रनटाइम की अनुमतियों के लिए ऑप्टिमाइज़ किए गए हैं. इनमें वर्क प्रोफ़ाइलें, ऐसिस्ट लेयर वगैरह शामिल हैं. DevicePolicyManager की अनुमतियों के नए एपीआई, M से पहले के ऐप्लिकेशन पर असर नहीं डालते.
    • जब उपयोगकर्ता किसी ACTION_PROVISION_MANAGED_PROFILE या ACTION_PROVISION_MANAGED_DEVICE इंटेंट की मदद से शुरू किए गए सेटअप फ़्लो के सिंक किए गए हिस्से से बाहर निकलते हैं, तो सिस्टम अब RESULT_CANCELED नतीजा कोड दिखाता है.
  • अन्य एपीआई में होने वाले बदलाव:
    • डेटा का इस्तेमाल: android.app.usage.NetworkUsageStats क्लास का नाम बदलकर NetworkStats कर दिया गया है.
  • ग्लोबल सेटिंग में बदलाव:
    • अब इन सेटिंग को setGlobalSettings() की मदद से सेट नहीं किया जा सकता:
      • BLUETOOTH_ON
      • DEVELOPMENT_SETTINGS_ENABLED
      • MODE_RINGER
      • NETWORK_PREFERENCE
      • WIFI_ON
    • ये ग्लोबल सेटिंग अब setGlobalSettings() से सेट की जा सकती हैं: