پیاده سازی مدیریت دستگاه

این بخش نحوه فعالسازی و اعتبارسنجی ویژگیهای مدیریت دستگاه مورد نیاز برای آماده سازی دستگاهها برای نمایه های مدیریت شده را توضیح می دهد. همچنین موارد کاربر صاحب دستگاه را که در محیط شرکت ضروری است ، پوشش می دهد.

علاوه بر کد AOSP ، یک دستگاه به اجزای زیر نیاز دارد تا با پروفایل های مدیریت شده کار کنند.

الزامات کلی

دستگاههایی که قصد دارند از مدیریت دستگاه پشتیبانی کنند باید شرایط عمومی زیر را داشته باشند.

مقادیر حرارتی HAL

Android 7.0 و بالاتر شامل پشتیبانی از HardwarePropertiesManager API است ، یک API نظارت بر دستگاه و گزارش سلامت که به برنامه ها امکان می دهد از وضعیت سخت افزار دستگاه پرس و جو کنند. این API از طریق در معرض android.os.HardwarePropertiesManager و باعث می شود تماس از طریق HardwarePropertiesManagerService به HAL سخت افزار حرارتی ( hardware/libhardware/include/hardware/thermal.h ). این API محافظت شده است، به این معنی تنها دستگاه صاحب دستگاه / مشخصات برنامه های کاربردی کنترل سیاست (DPC) و جریان VrListenerService می توانید آن تماس بگیرید.

برای پشتیبانی از HardwarePropertiesManager API ، اجرای حرارتی دستگاه حرارتی باید بتواند مقادیر زیر را گزارش دهد:

ارزش مقیاس گزارش را قادر می سازد
دمای [CPU | GPU | باتری | پوست دستگاه] دمای جزء بر حسب درجه سانتیگراد برنامه ها می توانند دمای دستگاه و دمای خنثی/خاموش شدن قطعات را بررسی کنند
CPU فعال/تعداد دفعات فعال شدن زمان بر حسب میلی ثانیه برنامه ها می توانند میزان مصرف CPU را در هر هسته بررسی کنند
سرعت فن دور در دقیقه برنامه ها می توانند سرعت فن را بررسی کنند

هنگامی که یک هسته (یا پردازنده گرافیکی ، باتری ، فن) آفلاین می شود یا به برق متصل می شود ، باید مقادیر گزارش دهی مقادیر را به درستی مدیریت کند.

فعال کردن مدیریت دستگاه

برای فعال کردن مدیریت دستگاه، موارد زیر اطمینان حاصل 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 اعلام شده است. 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

اندروید 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 بدون تغییرات، پس از آن شما به احتمال زیاد در حال حاضر این ویژگی badging حمایت می کنند.

الزامات 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();
       }

       ...
   }