डिवाइस प्रबंधन लागू करना

यह खंड वर्णन करता है कि प्रबंधित प्रोफ़ाइल के लिए डिवाइस तैयार करने के लिए आवश्यक डिवाइस प्रबंधन सुविधाओं को कैसे सक्षम और मान्य किया जाए। इसमें डिवाइस के मालिक उपयोगकर्ता के मामले भी शामिल हैं जो कॉर्पोरेट वातावरण में आवश्यक हैं।

एओएसपी कोड के अतिरिक्त, एक डिवाइस को प्रबंधित प्रोफाइल के साथ कार्य करने के लिए निम्नलिखित घटकों की आवश्यकता होती है।

सामान्य आवश्यकताएँ

डिवाइस प्रबंधन का समर्थन करने के इच्छुक उपकरणों को निम्नलिखित सामान्य आवश्यकताओं को पूरा करना चाहिए।

थर्मल एचएएल मान

एंड्रॉइड 7.0 और बाद में हार्डवेयरप्रॉपर्टीज मैनेजर एपीआई, एक डिवाइस मॉनिटरिंग और स्वास्थ्य रिपोर्टिंग एपीआई के लिए समर्थन शामिल है जो एप्लिकेशन को डिवाइस हार्डवेयर की स्थिति को क्वेरी करने में सक्षम बनाता है। इस एपीआई के माध्यम से सामने आ रहा है android.os.HardwarePropertiesManager और के माध्यम से कॉल करता है HardwarePropertiesManagerService हार्डवेयर थर्मल एचएएल (करने के लिए hardware/libhardware/include/hardware/thermal.h )। यह एक संरक्षित एपीआई है, केवल उपकरण / प्रोफ़ाइल स्वामी ने उपकरण नीति नियंत्रक (डीपीसी) अनुप्रयोगों और वर्तमान अर्थ 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 में प्रदान किया गया) और अन्य बैज यूजर इंटरफेस तत्वों जैसे कि रीसेंट और नोटिफिकेशन के साथ अपडेट करना होगा। आप का उपयोग करते हैं launcher3 संशोधनों के बिना AOSP में है, तो आप की संभावना पहले से ही इस बैज सुविधा का समर्थन।

एनएफसी आवश्यकताएं

एनएफसी के साथ उपकरणों को आउट-ऑफ-द-बॉक्स अनुभव (यानी, सेटअप विज़ार्ड) के दौरान एनएफसी को सक्षम करना चाहिए और प्रबंधित प्रावधान इरादों को स्वीकार करने के लिए कॉन्फ़िगर किया जाना चाहिए:

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();
       }

       ...
   }