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ị

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

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 hiển thị thông qua android.os.HardwarePropertiesManager và thực hiện các cuộc gọi thông qua HardwarePropertiesManagerService đến HAL nhiệt phần cứng ( hardware/libhardware/include/hardware/thermal.h ). Nó là một API được bảo vệ, có nghĩa là chỉ các ứng dụng Device Policy Controller (DPC) của chủ sở hữu thiết bị / hồ sơ và VrListenerService hiện tại mới có thể gọi nó.

Để hỗ trợ API HardwarePropertiesManager, việc triển khai HAL nhiệt của 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ị

Để bật tính năng quản lý thiết bị, hãy đảm bảo các uses-features sau được khai báo:

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

Để xác nhận các giá trị uses-feature đã được khai báo trên 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ý. Xin lưu ý rằng tất cả các trường hợp ví dụ của tệp _managed_profile.xml dưới đây chỉ có 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ác ứng dụng bắt buộc và không được phép đối với người dùng được quản lý được áp dụng cho người dùng thứ cấp được tạo 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 với 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 có sửa đổi, thì có thể bạn đã 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();
       }

       ...
   }