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

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

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

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

اندروید 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>

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

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

       ...
   }