यह खंड वर्णन करता है कि प्रबंधित प्रोफ़ाइल के लिए डिवाइस तैयार करने के लिए आवश्यक डिवाइस प्रबंधन सुविधाओं को कैसे सक्षम और मान्य किया जाए। इसमें डिवाइस के मालिक उपयोगकर्ता के मामले भी शामिल हैं जो कॉर्पोरेट वातावरण में आवश्यक हैं।
एओएसपी कोड के अतिरिक्त, एक डिवाइस को प्रबंधित प्रोफाइल के साथ कार्य करने के लिए निम्नलिखित घटकों की आवश्यकता होती है।
सामान्य आवश्यकताएँ
डिवाइस प्रबंधन का समर्थन करने के इच्छुक उपकरणों को निम्नलिखित सामान्य आवश्यकताओं को पूरा करना चाहिए।
थर्मल एचएएल मान
एंड्रॉइड 7.0 और बाद में हार्डवेयरप्रॉपर्टीज मैनेजर एपीआई, एक डिवाइस मॉनिटरिंग और स्वास्थ्य रिपोर्टिंग एपीआई के लिए समर्थन शामिल है जो एप्लिकेशन को डिवाइस हार्डवेयर की स्थिति को क्वेरी करने में सक्षम बनाता है। इस एपीआई को android.os.HardwarePropertiesManager
के माध्यम से उजागर किया गया है और हार्डवेयर थर्मल एचएएल ( hardware/libhardware/include/hardware/thermal.h
) को HardwarePropertiesManagerService
के माध्यम से कॉल करता है। यह एक संरक्षित एपीआई है, जिसका अर्थ है केवल डिवाइस/प्रोफाइल स्वामी डिवाइस पॉलिसी कंट्रोलर (डीपीसी) एप्लिकेशन और वर्तमान VrListenerService
इसे कॉल कर सकते हैं।
हार्डवेयरप्रॉपर्टीज मैनेजर एपीआई का समर्थन करने के लिए, डिवाइस थर्मल एचएएल कार्यान्वयन निम्नलिखित मानों की रिपोर्ट करने में सक्षम होना चाहिए:
मूल्य | रिपोर्टिंग स्केल | सक्षम बनाता है |
---|---|---|
[CPU|GPU|बैटरी|डिवाइस स्किन] का तापमान | डिग्री सेल्सियस में घटक का तापमान | ऐप्स डिवाइस तापमान और घटक थ्रॉटलिंग/शटडाउन तापमान की जांच कर सकते हैं |
सीपीयू सक्रिय/कुल सक्षम समय | मिलीसेकंड में समय | ऐप्स प्रति कोर CPU उपयोग की जांच कर सकते हैं |
पंखे की गति | आरपीएम | ऐप्स पंखे की गति की जांच कर सकते हैं |
जब कोर (या GPU, बैटरी, पंखा) ऑफ़लाइन हो जाता है या प्लग/अनप्लग हो जाता है, तो कार्यान्वयन को रिपोर्टिंग मान स्थितियों को सही ढंग से संभालना चाहिए।
डिवाइस प्रबंधन को सक्षम करना
डिवाइस प्रबंधन को सक्षम करने के लिए, सुनिश्चित करें कि निम्नलिखित uses-features
घोषित की गई हैं:
-
android.software.device_admin
-
android.software.managed_users
(सुविधा की घोषणा तभी की जाती है जब डिवाइस में कम से कम 2 जीबी मेमोरी हो।)
इन uses-feature
मान डिवाइस पर घोषित किए गए हैं, चलाएँ: adb shell pm list features
।
केवल आवश्यक ऐप्स
डिफ़ॉल्ट रूप से, प्रबंधित डिवाइस के प्रावधान के हिस्से के रूप में केवल प्रोफ़ाइल के सही संचालन के लिए आवश्यक एप्लिकेशन सक्षम होते हैं। ध्यान रखें, नीचे दी गई _managed_profile.xml
फ़ाइलों के सभी उदाहरण इंस्टेंस केवल तभी प्रासंगिक हैं जब android.software.managed_users
घोषित किया गया हो। ओईएम को यह सुनिश्चित करना चाहिए कि प्रबंधित प्रोफ़ाइल या डिवाइस में संशोधित करके सभी आवश्यक एप्लिकेशन हैं:
vendor_required_apps_managed_profile.xml vendor_required_apps_managed_device.xml vendor_disallowed_apps_managed_profile.xml vendor_disallowed_apps_managed_device.xml /* * The following are for Android 9 and higher only */ vendor_required_apps_managed_user.xml vendor_disallowed_apps_managed_user.xml
प्रबंधित उपयोगकर्ताओं के लिए आवश्यक और अस्वीकृत ऐप्स DevicePolicyManager#createAndManageUser
के माध्यम से बनाए गए द्वितीयक उपयोगकर्ताओं पर लागू होते हैं।
Nexus डिवाइस के उदाहरण
Android 8.x और इससे पहले का
pacakages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml
एंड्रॉइड 9 और उच्चतर
frameworks/base/core/res/res/values/vendor_required_apps_managed_device.xml
<resources> <!-- A list of apps to be retained on the managed device --> <string-array name="vendor_required_apps_managed_device"> <item>com.android.vending</item> <!--Google Play --> <item>com.google.android.gms</item> <!--Required by Play --> <item>com.google.android.contacts</item> <!--Google or OEM Contacts--> <item>com.google.android.googlequicksearchbox</item> <!--Google Launcher --> <item>com.google.android.launcher</item> <!--Google Launcher or OEM Launcher --> <item>com.google.android.dialer</item> <!--Google or OEM dialer to enable making phone calls --> </string-array> </resources>
Android 8.x और इससे पहले का
packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_profile.xml
एंड्रॉइड 9 और उच्चतर
frameworks/base/core/res/res/values/vendor_required_apps_managed_profile.xml
<resources> <!-- A list of apps to be retained in the managed profile. This includes any Google experience apps required. --> <string-array name="vendor_required_apps_managed_profile"> <item>com.android.vending</item> <!-- Google Play --> <item>com.google.android.gms</item> <!-- Required by Play --> <item>com.google.android.contacts</item> <!-- Google or OEM Contacts --> </string-array> </resources>
लॉन्चर आवश्यकताएं
बैजिंग एप्लिकेशन का समर्थन करने के लिए आपको लॉन्चर को आइकन बैज (प्रबंधित एप्लिकेशन का प्रतिनिधित्व करने के लिए AOSP में प्रदान किया गया) और अन्य बैज यूजर इंटरफेस तत्वों जैसे कि रीसेंट और नोटिफिकेशन के साथ अपडेट करना होगा। यदि आप AOSP में बिना किसी संशोधन के लॉन्चर 3 का उपयोग करते हैं, तो संभवतः आप पहले से ही इस बैजिंग सुविधा का समर्थन करते हैं।
एनएफसी आवश्यकताएं
एनएफसी के साथ उपकरणों को आउट-ऑफ-द-बॉक्स अनुभव (यानी, सेटअप विज़ार्ड) के दौरान एनएफसी को सक्षम करना चाहिए और प्रबंधित प्रावधान इरादों को स्वीकार करने के लिए कॉन्फ़िगर किया जाना चाहिए:
packages/apps/Nfc/res/values/provisioning.xml
<bool name="enable_nfc_provisioning">true</bool> <item>application/com.android.managedprovisioning</item>
सेटअप आवश्यकताएँ
जिन उपकरणों में एक आउट-ऑफ-बॉक्स अनुभव (यानी, सेटअप विज़ार्ड) शामिल है, उन्हें डिवाइस स्वामी प्रावधान लागू करना चाहिए। जब आउट-ऑफ़-बॉक्स अनुभव खुलता है, तो उसे यह जांचना चाहिए कि क्या किसी अन्य प्रक्रिया (जैसे डिवाइस स्वामी प्रावधान) ने पहले ही उपयोगकर्ता सेटअप समाप्त कर दिया है और, यदि ऐसा है, तो उसे घर के इरादे को सक्रिय करना चाहिए और सेटअप समाप्त करना चाहिए। इस आशय को प्रोविजनिंग एप्लिकेशन द्वारा पकड़ा जाता है, जो तब नए-सेट डिवाइस के मालिक को नियंत्रण सौंपता है।
सेटअप आवश्यकताओं को पूरा करने के लिए, डिवाइस सेटअप की मुख्य गतिविधि में निम्न कोड जोड़ें:
@Override protected void onStart() { super.onStart(); // When returning to a setup wizard activity, check to see if another setup process // has intervened and, if so, complete an orderly exit boolean completed = Settings.Secure.getInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 0) != 0; if (completed) { startActivity(new Intent(Intent.ACTION_MAIN, null) .addCategory(Intent.CATEGORY_HOME) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)); finish(); } ... }