Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Thực hiện quản lý thiết bị

Phần này mô tả cách bật và xác thực các tính năng quản lý thiết bị cần thiết để chuẩn bị thiết bị cho các cấu hình được quản lý. Nó cũng bao gồm các trường hợp người dùng của chủ sở hữu thiết bị cần thiết trong môi trường công ty.

Ngoài mã AOSP, một thiết bị yêu cầu các thành phần sau để hoạt động với các cấu hình được quản lý.

Yêu câu chung

Các thiết bị có ý định hỗ trợ quản lý thiết bị phải đáp ứng các yêu cầu chung sau đây.

Giá trị HAL nhiệt

Android 7.0 trở lên bao gồm hỗ trợ API HardwarePropertiesManager, một API báo cáo tình trạng và giám sát thiết bị cho phép các ứng dụng truy vấn trạng thái của phần cứng thiết bị. API này được tiếp xúc qua android.os.HardwarePropertiesManager và làm cho các cuộc gọi qua HardwarePropertiesManagerService đến HAL phần cứng nhiệt ( hardware/libhardware/include/hardware/thermal.h ). Nó là một API được bảo vệ, có nghĩa là chỉ chủ sở hữu thiết bị / profile thiết bị ứng dụng Controller Policy (DPC) và hiện tại VrListenerService có thể gọi nó.

Để hỗ trợ API HardwarePropertiesManager, việc triển khai HAL nhiệt thiết bị phải có khả năng báo cáo các giá trị sau:

Giá trị Quy mô báo cáo Cho phép
Nhiệt độ của [CPU | GPU | Pin | Da thiết bị] Nhiệt độ của thành phần tính bằng độ C Các ứng dụng có thể kiểm tra nhiệt độ thiết bị và nhiệt độ điều chỉnh / tắt máy của linh kiện
CPU hoạt động / tổng số lần kích hoạt Thời gian tính bằng mili giây Các ứng dụng có thể kiểm tra mức sử dụng CPU trên mỗi lõi
Tốc độ quạt RPM Ứng dụng có thể kiểm tra tốc độ quạt

Việc triển khai phải xử lý chính xác các tình huống giá trị báo cáo khi lõi (hoặc GPU, pin, quạt) ngoại tuyến hoặc được cắm / rút phích cắm.

Bật quản lý thiết bị

Để kích hoạt tính năng quản lý thiết bị, đảm bảo sau uses-features được khai báo:

  • android.software.device_admin
  • android.software.managed_users (tính năng được khai báo nếu và chỉ nếu thiết bị có ít nhất 2 GB bộ nhớ.)

Để xác nhận những uses-feature giá trị đã được công bố trên một thiết bị, hãy chạy: adb shell pm list features .

Chỉ những ứng dụng cần thiết

Theo mặc định, chỉ những ứng dụng cần thiết cho hoạt động chính xác của cấu hình mới được bật như một phần của việc cấp phép thiết bị được quản lý. Hãy ghi nhớ, tất cả các trường ví dụ về _managed_profile.xml file dưới đây chỉ liên quan nếu android.software.managed_users được khai báo. OEM phải đảm bảo cấu hình hoặc thiết bị được quản lý có tất cả các ứng dụng bắt buộc bằng cách sửa đổi:

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

Cần thiết và không được phép ứng dụng cho người dùng quản lý được áp dụng đối với người dùng phổ thông tạo thông qua DevicePolicyManager#createAndManageUser .

Ví dụ từ thiết bị Nexus

Android 8.x trở về trước

pacakages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml

Android 9 trở lên

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 trở về trước

packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_profile.xml

Android 9 trở lên

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>

Yêu cầu về trình khởi chạy

Bạn phải cập nhật Trình khởi chạy để hỗ trợ các ứng dụng huy hiệu bằng biểu tượng biểu tượng (được cung cấp trong AOSP để đại diện cho các ứng dụng được quản lý) và các yếu tố giao diện người dùng huy hiệu khác như gần đây và thông báo. Nếu bạn sử dụng launcher3 trong AOSP mà không sửa đổi, sau đó bạn có thể đã hỗ trợ tính năng huy hiệu này.

Yêu cầu NFC

Các thiết bị có NFC phải bật NFC trong trải nghiệm xuất xưởng (tức là trình hướng dẫn thiết lập) và được định cấu hình để chấp nhận các ý định cấp phép được quản lý:

packages/apps/Nfc/res/values/provisioning.xml
<bool name="enable_nfc_provisioning">true</bool>
<item>application/com.android.managedprovisioning</item>

Yêu cầu thiết lập

Các thiết bị bao gồm trải nghiệm out-box (tức là trình hướng dẫn thiết lập) phải triển khai cấp phép chủ sở hữu thiết bị. Khi trải nghiệm out-box mở ra, nó sẽ kiểm tra xem một quy trình khác (chẳng hạn như cấp phép cho chủ sở hữu thiết bị) đã hoàn tất quá trình thiết lập người dùng chưa và nếu có, nó sẽ kích hoạt ý định gia đình và hoàn tất quá trình thiết lập. Ý định này bị bắt bởi ứng dụng cấp phép, sau đó ứng dụng này sẽ giao quyền kiểm soát cho chủ sở hữu thiết bị mới được thiết lập.

Để đáp ứng các yêu cầu thiết lập, hãy thêm mã sau vào hoạt động chính của thiết lập thiết bị:

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

       ...
   }