تنفيذ إدارة الجهاز

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

يصف هذا القسم كيفية تمكين والتحقق من صحة ميزات إدارة الجهاز المطلوبة لإعداد الأجهزة لملفات التعريف المدارة. كما يغطي حالات مستخدم مالك الجهاز الضرورية في بيئة الشركة.

بالإضافة إلى رمز AOSP ، يتطلب الجهاز المكونات التالية لتعمل مع ملفات التعريف المدارة.

المتطلبات العامة

يجب أن تفي الأجهزة التي تهدف إلى دعم إدارة الجهاز بالمتطلبات العامة التالية.

قيم HAL الحرارية

يشتمل Android 7.0 والإصدارات الأحدث على دعم واجهة برمجة تطبيقات HardwarePropertiesManager ، وهي واجهة برمجة تطبيقات لمراقبة الأجهزة وإعداد تقارير صحية تتيح للتطبيقات الاستعلام عن حالة أجهزة الجهاز. يتم الكشف عن واجهة برمجة التطبيقات هذه عبر android.os.HardwarePropertiesManager وإجراء مكالمات من خلال HardwarePropertiesManagerService إلى HAL الحراري للأجهزة ( hardware/libhardware/include/hardware/thermal.h ). إنها واجهة برمجة تطبيقات محمية ، وهذا يعني فقط تطبيقات وحدة التحكم في سياسة الجهاز (DPC) لمالك الجهاز / الملف الشخصي ويمكن VrListenerService الحالية تسميتها.

لدعم واجهة برمجة تطبيقات HardwarePropertiesManager ، يجب أن يكون تنفيذ HAL الحراري للجهاز قادرًا على الإبلاغ عن القيم التالية:

قيمة مقياس التقارير تمكن
درجة حرارة [وحدة المعالجة المركزية | وحدة معالجة الرسومات | البطارية | غلاف الجهاز] درجة حرارة المكون بالدرجات المئوية يمكن للتطبيقات التحقق من درجات حرارة الجهاز ودرجات حرارة اختناق / إيقاف تشغيل المكونات
وحدة المعالجة المركزية النشطة / إجمالي عدد مرات التمكين الوقت بالميلي ثانية يمكن للتطبيقات التحقق من استخدام وحدة المعالجة المركزية لكل مركز
سرعة المروحة دورة في الدقيقة يمكن للتطبيقات التحقق من سرعة المروحة

يجب أن تتعامل التطبيقات بشكل صحيح مع مواقف قيم الإبلاغ عندما ينقطع اتصال النواة (أو وحدة معالجة الرسومات ، والبطارية ، والمروحة) أو يتم توصيله / فصله.

تمكين إدارة الجهاز

لتمكين إدارة الجهاز ، تأكد من الإعلان عن 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

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>

متطلبات المشغل

يجب عليك تحديث المشغل لدعم تطبيقات الشارات بشارة الأيقونة (المتوفرة في 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();
       }

       ...
   }