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