Android 7.1.1 में, रीटेल डेमो मोड के लिए सिस्टम-लेवल की सहायता शुरू की गई है, ताकि खरीदार खुदरा दुकानों पर डिवाइसों को इस्तेमाल करके देख सकें. डिवाइसों को रीटेल डेमो के लिए, डिवाइस के मालिक वाले ऐप्लिकेशन का इस्तेमाल करके सेट अप किया जाता है. इससे यह पक्का किया जा सकता है कि डिवाइस का इस्तेमाल, सिर्फ़ डेमो मोड वाले कुछ ऐप्लिकेशन के लिए किया जाए. असली उपयोगकर्ताओं के पास, रीटेल डेमो डिवाइस पर निजी खाता जोड़ने की सुविधा नहीं होनी चाहिए. Android 8.1 में इस सुविधा में बदलाव किया गया है, ताकि डिवाइस के लिए बनी नीति मैनेज करने वाले एपीआई के createAndManageUser के ज़रिए, डेमो उपयोगकर्ता बनाए जा सकें. इससे, डीमो डिवाइस पर उपयोगकर्ता मैनेजमेंट और डिवाइस नीति मैनेजमेंट के मामले में, स्टैंडर्ड रीटेल मोड में OEM को ज़्यादा कस्टमाइज़ करने की अनुमति मिलती है.
DevicePolicyManager एपीआई का इस्तेमाल, Android 8.1 से पहले के वर्शन पर किया जा सकता है. हालांकि, 8.0 और उससे पहले के वर्शन में, createAndManageUser एपीआई का इस्तेमाल करके, डेमो-टाइप उपयोगकर्ता (DevicePolicyManager.MAKE_USER_DEMO
) नहीं बनाए जा सकते.
Android 8.1 और इसके बाद के वर्शन में लागू करना
इस सेक्शन में, प्लैटफ़ॉर्म में हुए सुधारों के बारे में बताया गया है. साथ ही, Android 8.1 और उसके बाद के वर्शन में, रीटेल डेमो ऐप्लिकेशन के बारे में जानकारी दी गई है.
प्लैटफ़ॉर्म में हुए बदलाव
Device_DEMO_mode सेट करें
डिवाइस के मालिक के हिसाब से रिटेल डेमो मोड लागू करने वाले डिवाइसों को डिवाइस को डिवाइस के मालिक के हिसाब से रिटेल डेमो मोड के लिए सेट अप करने से पहले, Settings.Global.DEVICE_DEMO_MODE
को 1 पर सेट करना होगा. इससे यह पता चलता है कि डिवाइस को रिटेल डेमो मोड के लिए सेट अप किया जा रहा है.
SystemServer, इस फ़्लैग का इस्तेमाल करके, रीटेल मोड के पहलुओं को मैनेज करता है. जैसे, पावर प्रोफ़ाइल और SystemUI.
RetailDemoModeService को चालू करना
रीटेल डेमो मोड लागू करने वाले डिवाइसों में, सेटअप विज़र्ड एक ग्लोबल सेटिंग Global.DEVICE_DEMO_MODE
को true
पर सेट करता है. इससे पता चलता है कि डिवाइस ने रीटेल मोड चालू कर दिया है. इस सेटिंग को देखकर, RetailDemoModeService एक डेमो उपयोगकर्ता बनाता है और उपयोगकर्ता 0 के शुरू होने पर उस पर स्विच करता है. साथ ही, ओवरले संसाधन में बताए गए कस्टम लॉन्चर को चालू करता है और SUW को बंद करता है. सिस्टम
Server और SystemUI भी इस फ़्लैग का इस्तेमाल रीटेल मोड के पहलुओं को मैनेज करने के लिए करते हैं.
कस्टम लॉन्चर या वीडियो प्लेयर सेट करना
डिवाइस बनाने वाली कंपनियां, config.xml फ़ाइल में बताए गए फ़्रेमवर्क रिसॉर्स config_demoModeLauncherComponent
को बदलकर, अपनी पसंद का लॉन्चर तय कर सकती हैं. इसके लिए, उन्हें यह तरीका अपनाना होगा.
<!-- Component that is the default launcher when Retail Mode is enabled. -->
<string name="config_demoModeLauncherComponent">com.android.retaildemo/.DemoPlayer</string>
रीटेल डेमो DemoPlayer ऐप्लिकेशन, Android Open Source Project (AOSP) में डिफ़ॉल्ट कस्टम लॉन्चर है. यह /packages/apps/RetailDemo पर मौजूद है. ऐप्लिकेशन, डिवाइस के पार्टीशन में वीडियो खोजता है. जैसे, /data/preloads/demo/retail_demo.mp4 और उसे लूप में चलाता है. जब उपयोगकर्ता स्क्रीन को छूता है, तो कस्टम लॉन्चर अपने ऐक्टिविटी कॉम्पोनेंट को बंद कर देता है. इससे, डिफ़ॉल्ट सिस्टम लॉन्चर चालू हो जाता है.
कस्टम लॉन्चर के कस्टम कॉम्पोनेंट को डिफ़ॉल्ट रूप से 'बंद है' के तौर पर मार्क किया जाना चाहिए, ताकि यह डेमो के अलावा अन्य स्थितियों में न दिखे. डेमो के मामले में, सिस्टम सर्वर नया डेमो सेशन शुरू करते समय, तय किए गए config_demoModeLauncherComponent
को चालू करता है.
सेटअप विज़र्ड, रीटेल मोड में जाने के लिए, पहले बताए गए वीडियो को भी खोजता है. अगर वीडियो, डेमो का हिस्सा नहीं है, तो SUW में बदलाव करके, OEM के हिसाब से कोई दूसरा संकेत देखा जा सकता है. इससे यह पता चलता है कि रीटेल मोड काम करता है. अगर सिस्टम A/B पार्टीशन हैं, तो सिस्टम B पार्टीशन में /preloads/demo पर डेमो वीडियो होना चाहिए. यह पहली बार बूट होने पर, /data/preloads/demo में कॉपी हो जाता है.
रीटेल डेमो मोड के लिए, पहले से लोड किए गए ऐप्लिकेशन को पसंद के मुताबिक बनाना
पहले से लोड किए गए ऐप्लिकेशन, रीटेल डेमो मोड के लिए अपने अनुभव को पसंद के मुताबिक बना सकते हैं. इसके लिए, उन्हें UserManager.isDemoUser()
एपीआई को कॉल करके यह देखना होगा कि ऐप्लिकेशन को डेमो एनवायरमेंट में लॉन्च किया गया है या नहीं.
डेमो उपयोगकर्ता के लिए कुछ पाबंदियां सेट की जाती हैं. ये पाबंदियां, मैनेज किए जा रहे डिवाइस या प्रोफ़ाइल से जुड़ी नीतियों की तरह ही होती हैं. इनकी वजह से, ऐप्लिकेशन और उपयोगकर्ता कुछ कार्रवाइयां नहीं कर पाते.
इनमें से एक पाबंदी DISALLOW_MODIFY_ACCOUNTS
है. इस पाबंदी के तहत, AccountManager और Settings में खाते जोड़े नहीं जा सकते. Google के कुछ ऐप्लिकेशन इस पाबंदी पर प्रतिक्रिया देते हैं और गड़बड़ी का मैसेज दिखाते हैं. वहीं, कुछ ऐप्लिकेशन (जैसे, YouTube और Photos) में किसी खाते के लिए सूचना नहीं भेजी जाती. हमारा सुझाव है कि OEM ऐप्लिकेशन यह भी देखें कि DISALLOW_MODIFY_ACCOUNTS
सेट है या नहीं. साथ ही, उसी हिसाब से स्थिति को मैनेज करें.
सिस्टम अपडेट
रीटेल मोड चालू होने पर, डिवाइस की नीति डिफ़ॉल्ट रूप से, ऑवर-द-एयर (ओटीए) अपडेट पर सेट हो जाती है. रीटेल डिवाइस, उपयोगकर्ता के इंटरैक्शन के बिना अपडेट को डाउनलोड करेंगे, रीबूट करेंगे, और इंस्टॉल करेंगे. हालांकि, ऐसा बैटरी थ्रेशोल्ड के हिसाब से किया जाएगा.
रीटेल डेमो ऐप्लिकेशन
डिवाइस के मालिक के आधार पर, रीटेल डेमो मोड लागू करने के लिए, डिवाइस नीति कंट्रोलर ऐप्लिकेशन को डिवाइस के मालिक के तौर पर सेट करना ज़रूरी है. AOSP में, /packages/apps/RetailDemo में RetailDemo ऐप्लिकेशन के लागू होने का रेफ़रंस मौजूद है.
डिवाइस के मालिक के ऐप्लिकेशन के लिए, बेहतर सुविधाओं या सिस्टम इमेज पर पहले से इंस्टॉल होने की ज़रूरत नहीं होती. साथ ही, इन्हें सेटअप या डिवाइस को उपलब्ध कराने की प्रोसेस के दौरान डाउनलोड किया जा सकता है. इन्हें ज़्यादातर पारंपरिक ऐप्लिकेशन की तरह ही लागू किया जाता है. हालांकि, इनमें ये अंतर होते हैं:
डिवाइस के मालिक के सभी ऐप्लिकेशन को DeviceAdminReceiver कॉम्पोनेंट को एक्सटेंड़ करना होगा. यह सभी DevicePolicyManager एपीआई के लिए अनुमति टोकन के तौर पर काम करता है. कॉम्पोनेंट के पास
android.permission.BIND_DEVICE_ADMIN
अनुमति होनी चाहिए. साथ ही, उसमें मेटाडेटा के तौर पर अनुरोध की गई खास नीतियां शामिल होनी चाहिए. साथ ही,android.app.action.PROFILE_PROVISIONING_COMPLETE
औरandroid.app.action.DEVICE_ADMIN_ENABLED
इंटेंट को फ़िल्टर करना चाहिए.DevicePolicyManager#MAKE_USER_DEMO फ़्लैग, एक छिपा हुआ एपीआई है. इसे खास तरह के डेमो उपयोगकर्ता बनाने के लिए सेट किया जाता है. इस फ़्लैग की वैल्यू, कॉन्स्टेंट 0x4 होती है.
डिवाइस का मालिकाना हक सिर्फ़ डिवाइस मैनेज करने की भूमिका रखने वाले व्यक्ति या ManagedProvisioning ऐप्लिकेशन के ज़रिए असाइन किया जाना चाहिए.
DevicePolicyManager क्लास के एपीआई, डिवाइस की अलग-अलग नीतियां लागू करने के लिए डिवाइस का मालिक (DO) और प्रोफ़ाइल का मालिक (पीओ) चालू करते हैं. रीटेल डेमो मोड के लिए लागू होने वाले DevicePolicyManager के कुछ फ़ंक्शन यहां दिए गए हैं.
उपयोगकर्ताओं की प्रोफ़ाइलें बनाई जा सकती हैं और उन्हें मैनेज किया जा सकता है.
डिवाइस को रीबूट करें.
LockTask के लिए अनुमति वाले पैकेज सेट करें.
PackageInstaller की मदद से पैकेज इंस्टॉल करें.
पैकेज को अनइंस्टॉल होने से रोकना.
सिस्टम के अपडेट अपने-आप होने की सुविधा चालू करें. डिवाइस, ओटीए अपडेट को अपने-आप डाउनलोड और लागू कर देंगे.
कीगार्ड बंद करें.
पासवर्ड या फ़िंगरप्रिंट सेट करने से रोकना.
Settings.Global, Settings.Secure, और Settings.System सेटिंग के लिए, अनुमति वाली सूची सेट करें.
अनुमति की नीति को
PERMISSION_POLICY_AUTO_GRANT
पर सेट करें. इससे, रनटाइम के दौरान सभी अनुमतियां अपने-आप मिल जाती हैं. अनुमतियां, ज़्यादा सीमित तौर पर भी दी जा सकती हैं: किसी एक ऐप्लिकेशन के लिए एक अनुमति. यह, ऐप्लिकेशन के काम करने के लिए ज़रूरी अनुमतियों पर लागू नहीं होता. उपयोगकर्ताओं को अब भी हर ऐप्लिकेशन के लिए, हर उपयोगकर्ता को अनुमति देनी होगी.UserManager में बताए गए तरीके से, रीटेल मोड के हिसाब से उपयोगकर्ताओं के लिए पाबंदियां सेट करें.
DISALLOW_MODIFY_ACCOUNTS
DISALLOW_USB_FILE_TRANSFER
DISALLOW_DEBUGGING_FEATURES
DISALLOW_CONFIG_WIFI
DISALLOW_CONFIG_BLUETOOTH
DISALLOW_INSTALL_UNKNOWN_SOURCES
DISALLOW_CONFIG_MOBILE_NETWORKS
वेब का इस्तेमाल करके डेमो वीडियो अपडेट करना
/packages/apps/RetailDemo में मौजूद RetailDemo ऐप्लिकेशन, नेटवर्क कनेक्शन होने पर डेमो वीडियो को अपडेट कर सकता है. वीडियो डाउनलोड करने के लिए यूआरएल को कॉन्फ़िगर किया जा सकता है. इसके लिए, RetailDemo ऐप्लिकेशन में दी गई स्ट्रिंग वैल्यू को बदलें.
<!-- URL where the retail demo video can be downloaded from. -->
<string name="retail_demo_video_download_url"></string>
अगर अलग-अलग इलाकों में अलग-अलग वीडियो इस्तेमाल करने हैं, तो res/values-*/strings.xml में, स्थानीय भाषा के हिसाब से स्ट्रिंग रिसॉर्स का इस्तेमाल करके, अलग-अलग डाउनलोड यूआरएल कॉन्फ़िगर किए जा सकते हैं. उदाहरण के लिए, अगर अमेरिका और ग्रेट ब्रिटेन में अलग-अलग वीडियो इस्तेमाल करने हैं, तो डाउनलोड करने के लिए उनके यूआरएल को res/values-en-rUS/strings.xml और res/values-en-rGB/strings.xml में रखा जा सकता है. इन यूआरएल को यहां दिखाया गया है.
res/values-en-rUS/strings.xml में:
<string name="retail_demo_video_download_url">download URL for US video goes here</string>
res/values-en-rGB/strings.xml में:
<string name="retail_demo_video_download_url">download URL for UK video goes here</string>
हर डिवाइस को रीबूट करने पर, यह वीडियो ज़्यादा से ज़्यादा एक बार डाउनलोड किया जाता है. जब डिवाइस पर वीडियो चलाया जा रहा हो, तब RetailDemo ऐप्लिकेशन बैकग्राउंड में यह जांच करता है कि डाउनलोड करने के लिए यूआरएल दिया गया है या नहीं. साथ ही, यह भी जांच करता है कि यूआरएल पर मौजूद वीडियो, चलाए जा रहे वीडियो से नया है या नहीं.
अगर ऐसा है, तो RetailDemo ऐप्लिकेशन वीडियो डाउनलोड करके उसे चलाना शुरू कर देता है. वीडियो डाउनलोड होने के बाद, इसका इस्तेमाल आने वाले समय में सभी डेमो सेशन में किया जाता है. अगले रीबूट होने तक, कोई भी जांच फिर से नहीं की जाती.
डेमो वीडियो से जुड़े दिशा-निर्देश
डेमो वीडियो, पोर्ट्रेट लेआउट में होने चाहिए. अगर टैबलेट का इस्तेमाल किया जा रहा है, तो डिवाइस के सामान्य ओरिएंटेशन में वीडियो होने चाहिए. साथ ही, वीडियो की अवधि पांच सेकंड से ज़्यादा होनी चाहिए. कॉन्टेंट की वजह से डिसप्ले पर बर्न-इन नहीं होना चाहिए, क्योंकि डिसप्ले चालू होने पर कॉन्टेंट लगातार चलता रहेगा.
ज़्यादा जानकारी के लिए, उपयोगकर्ताओं, प्रोफ़ाइलों, और खातों के बारे में Android डेवलपर की परिभाषाएं, Device Policy Manager API का दस्तावेज़, और डिवाइस के मालिक के ऐप्लिकेशन का सैंपल देखें.
पुष्टि करें
सीटीएस में रीटेल डेमो मोड शामिल नहीं है, क्योंकि यह एक वैकल्पिक सुविधा है. डेमो ऐप्लिकेशन की जांच, मैन्युअल तरीके से या यूनिट टेस्ट की मदद से की जानी चाहिए.
डेमो सेशन
डेमो सेशन का सेटअप
फ़ैक्ट्री से डेमो मोड के लिए कॉन्फ़िगर किए जाने पर रीटेल डेमो डिवाइस में रीटेल डेमो मोड चालू हो सकता है. इसके अलावा, खुदरा दुकानदार सीधे सेटअप विज़र्ड से खुदरा मोड चालू कर सकते हैं.
दूसरी इमेज. रीटेल डेमो मोड
डेमो सेशन दिखाना
जब डिवाइस रीटेल मोड में जाता है, तो वह नए डेमो उपयोगकर्ता पर स्विच हो जाता है और लागू करने में बताए गए तरीके के मुताबिक, ओवरले संसाधन में बताए गए कस्टम लॉन्चर को अपने-आप शुरू कर देता है. डिफ़ॉल्ट रूप से, यह कस्टम लॉन्चर, डेमो वीडियो को तब तक दोहराता रहता है, जब तक उपयोगकर्ता डेमो उपयोगकर्ता सेशन शुरू करने के लिए स्क्रीन को छूता नहीं है. उस समय, कस्टम लॉन्चर, सिस्टम लॉन्चर को शुरू करता है और फिर बाहर निकल जाता है. OEM, बाहर निकलने पर किसी दूसरी सेवा या गतिविधि को लॉन्च करने के लिए, कस्टम लॉन्चर को बदल सकते हैं.
रीटेल मोड को सही तरीके से काम करने के लिए, कीगार्ड की सुविधा बंद कर दी जाती है. साथ ही, क्विक सेटिंग में मौजूद कुछ ऐसी कार्रवाइयों पर भी पाबंदी लगा दी जाती है जिनसे रीटेल मोड पर बुरा असर पड़ सकता है. इनमें ये कार्रवाइयां शामिल हैं.
- हवाई जहाज़ मोड टॉगल.
- वाई-फ़ाई ऐक्सेस पॉइंट हटाना या उनमें बदलाव करना (सेटिंग).
- मोबाइल और इंटरनेट सेवा देने वाली कंपनी बदलना (सेटिंग).
- हॉटस्पॉट कॉन्फ़िगर करना (सेटिंग).
- उपयोगकर्ता स्विच करना.
इसके अलावा, कुछ ग्लोबल सेटिंग का ऐक्सेस भी ब्लॉक किया जाता है. इन सेटिंग को बंद करने पर, रीटेल मोड पर असर पड़ सकता है:
- वाई-फ़ाई सेटिंग.
- मोबाइल नेटवर्क कॉन्फ़िगरेशन के विकल्प, खास तौर पर हॉटस्पॉट.
- ब्लूटूथ कॉन्फ़िगरेशन.
- बैकअप और रीसेट, तारीख और समय, और मोबाइल नेटवर्क (ये बिल्कुल नहीं दिखते).
अगर उपयोगकर्ता कुछ समय (डिफ़ॉल्ट रूप से 90 सेकंड) तक कोई कार्रवाई नहीं करता है, तो रीटेल मोड में एक सिस्टम डायलॉग दिखता है. इसमें उपयोगकर्ता को सेशन से बाहर निकलने या जारी रखने के लिए कहा जाता है. अगर उपयोगकर्ता बाहर निकलता है या पांच सेकंड तक कोई जवाब नहीं मिलता है, तो रीटेल मोड, मौजूदा डेमो उपयोगकर्ता को हटा देता है. साथ ही, नए डेमो उपयोगकर्ता पर स्विच करता है और ओरिजनल वीडियो को फिर से चलाता है. अगर पावर बटन का इस्तेमाल करके स्क्रीन बंद की जाती है, तो कुछ सेकंड बाद वह अपने-आप चालू हो जाती है.
डेमो सेशन से बाहर निकलने के बाद, डिवाइस खुद को म्यूट कर देते हैं और कुछ ग्लोबल सेटिंग रीसेट कर देते हैं. इनमें ये सेटिंग शामिल हैं:
- स्क्रीन की रोशनी
- ऑटो-रोटेशन
- फ़्लैशलाइट
- भाषा
- सुलभता
रीटेल डेमो मोड से बाहर निकलना
रीटेल मोड से बाहर निकलने के लिए, खुदरा कर्मचारियों को यह पक्का करना होगा कि डेमो डिवाइस को डिवाइस मैनेजमेंट के तहत रजिस्टर न किया गया हो. साथ ही, बूट लोडर से डिवाइस को फ़ैक्ट्री रीसेट भी करना होगा.