การใช้การจัดการอุปกรณ์

ส่วนนี้อธิบายวิธีการเปิดใช้งานและตรวจสอบคุณสมบัติการจัดการอุปกรณ์ที่จำเป็นในการเตรียมอุปกรณ์สำหรับโปรไฟล์ที่มีการจัดการ นอกจากนี้ยังครอบคลุมกรณีผู้ใช้ของเจ้าของอุปกรณ์ที่จำเป็นในสภาพแวดล้อมขององค์กร

นอกจากโค้ด AOSP แล้ว อุปกรณ์ยังต้องการส่วนประกอบต่อไปนี้เพื่อทำงานร่วมกับโปรไฟล์ที่มีการจัดการ

ข้อกำหนดทั่วไป

อุปกรณ์ที่ต้องการสนับสนุนการจัดการอุปกรณ์ต้องเป็นไปตามข้อกำหนดทั่วไปดังต่อไปนี้

ค่า HAL ความร้อน

Android 7.0 ขึ้นไปมีการรองรับ HardwarePropertiesManager API ซึ่งเป็น API การตรวจสอบอุปกรณ์และการรายงานความสมบูรณ์ที่ช่วยให้แอปพลิเคชันสามารถสืบค้นสถานะของฮาร์ดแวร์ของอุปกรณ์ได้ API นี้เปิดเผยผ่าน android.os.HardwarePropertiesManager และทำการเรียกผ่าน HardwarePropertiesManagerService ไปยัง HAL ด้านความร้อนของฮาร์ดแวร์ ( hardware/libhardware/include/hardware/thermal.h ) เป็น API ที่ได้รับการป้องกัน ซึ่งหมายถึงเฉพาะแอปพลิเคชัน Device Policy Controller (DPC) เจ้าของอุปกรณ์/โปรไฟล์ และ VrListenerService ปัจจุบันเท่านั้นที่สามารถเรียกใช้ได้

เพื่อรองรับ HardwarePropertiesManager API การนำ HAL ความร้อนของอุปกรณ์ไปใช้งานต้องสามารถรายงานค่าต่อไปนี้ได้:

ค่า มาตราส่วนการรายงาน เปิดใช้งาน
อุณหภูมิของ [CPU|GPU|แบตเตอรี่|สกินอุปกรณ์] อุณหภูมิของส่วนประกอบในหน่วยองศาเซลเซียส แอปสามารถตรวจสอบอุณหภูมิของอุปกรณ์และอุณหภูมิการควบคุมปริมาณ/การปิดส่วนประกอบได้
ซีพียูที่ใช้งาน/เปิดใช้งานรวมครั้ง เวลาเป็นมิลลิวินาที แอพสามารถตรวจสอบการใช้งาน CPU ต่อคอร์ได้
ความเร็วของพัดลม RPM แอพตรวจสอบความเร็วพัดลมได้

การใช้งานควรจัดการสถานการณ์ค่าการรายงานได้อย่างถูกต้องเมื่อคอร์ (หรือ GPU, แบตเตอรี่, พัดลม) ออฟไลน์หรือถูกเสียบ/ถอดปลั๊ก

เปิดใช้งานการจัดการอุปกรณ์

หากต้องการเปิดใช้งานการจัดการอุปกรณ์ ให้ตรวจสอบว่ามีการประกาศ uses-features ต่อไปนี้:

  • android.software.device_admin
  • android.software.managed_users (คุณลักษณะจะถูกประกาศก็ต่อเมื่ออุปกรณ์มีหน่วยความจำอย่างน้อย 2 GB)

เพื่อยืนยันว่าค่า uses-feature เหล่านี้ได้รับการประกาศบนอุปกรณ์แล้ว ให้รัน: adb shell pm list features

แอพที่จำเป็นเท่านั้น

โดยค่าเริ่มต้น เฉพาะแอปพลิเคชันที่จำเป็นสำหรับการทำงานที่ถูกต้องของโปรไฟล์เท่านั้นที่จะเปิดใช้งานโดยเป็นส่วนหนึ่งของการเตรียมใช้งานอุปกรณ์ที่มีการจัดการ โปรดทราบว่าตัวอย่างทั้งหมดของไฟล์ _managed_profile.xml ด้านล่างนี้จะเกี่ยวข้องก็ต่อเมื่อมีการประกาศ android.software.managed_users OEM ต้องตรวจสอบให้แน่ใจว่าโปรไฟล์หรืออุปกรณ์ที่มีการจัดการมีแอปพลิเคชันที่จำเป็นทั้งหมดโดยแก้ไข:

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

Android 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

Android 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>

ข้อกำหนดของตัวเรียกใช้

คุณต้องอัปเดต Launcher เพื่อรองรับแอปพลิเคชันการติดป้ายด้วยป้ายไอคอน (มีให้ใน AOSP เพื่อแสดงถึงแอปพลิเคชันที่มีการจัดการ) และองค์ประกอบส่วนติดต่อผู้ใช้ของป้ายสถานะอื่นๆ เช่น ล่าสุดและการแจ้งเตือน หากคุณใช้ launcher3 ใน AOSP โดยไม่มีการปรับเปลี่ยน แสดงว่าคุณสนับสนุนคุณลักษณะการติดตราสัญลักษณ์นี้แล้ว

ข้อกำหนด NFC

อุปกรณ์ที่มี NFC ต้องเปิดใช้งาน NFC ระหว่างการใช้งานแบบสำเร็จรูป (เช่น วิซาร์ดการตั้งค่า) และได้รับการกำหนดค่าให้ยอมรับความตั้งใจในการจัดสรรที่มีการจัดการ:

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

       ...
   }