Ngừng quản trị viên thiết bị. Bắt đầu từ Android 9 (API cấp 28), một số chính sách quản trị sẽ được đánh dấu là không dùng nữa khi do quản trị viên thiết bị gọi. Bạn nên bắt đầu chuẩn bị ngay từ bây giờ cho sự thay đổi này. Để tìm hiểu thêm và xem các tuỳ chọn di chuyển, hãy đọc Quản trị viên thiết bị không dùng nữa.
Android có hỗ trợ cho các ứng dụng doanh nghiệp bằng cách cung cấp API Quản trị thiết bị Android. Device Management API (API Quản trị thiết bị) cung cấp thiết bị các tính năng quản trị ở cấp hệ thống. Các API này cho phép bạn tạo ứng dụng nhận biết bảo mật hữu ích trong cài đặt doanh nghiệp, trong đó CNTT chuyên gia đòi hỏi quyền kiểm soát chặt chẽ đối với thiết bị của nhân viên. Ví dụ: ứng dụng Email tích hợp sẵn trên Android đã tận dụng những API này để cải thiện Hỗ trợ Exchange. Thông qua ứng dụng Email, quản trị viên Exchange có thể thực thi chính sách mật khẩu – kể cả mật khẩu bao gồm chữ và số hoặc mật khẩu dạng số Mã PIN — trên nhiều thiết bị. Quản trị viên cũng có thể xoá sạch từ xa (tức là khôi phục chế độ cài đặt mặc định về trạng thái ban đầu) cho điện thoại di động bị mất hoặc bị đánh cắp. Người dùng Exchange có thể đồng bộ hoá email và lịch của họ.
Tài liệu này dành cho các nhà phát triển muốn phát triển dành cho thiết bị chạy Android. Tài liệu này thảo luận về nhiều tính năng do API Quản trị thiết bị cung cấp nhằm tăng cường bảo mật cho thiết bị của nhân viên chạy Android.
Lưu ý Để biết thông tin về việc xây dựng Chính sách về công việc Bộ điều khiển cho việc triển khai Android for Work, hãy xem Xây dựng Trình kiểm soát chính sách thiết bị.
Chế độ chủ sở hữu thiết bị không có giao diện người dùng
Android 14 (API cấp 34) ra mắt Chế độ người dùng hệ thống không có giao diện người dùng (các thiết bị trong
thiết bị nào
UserManager.isHeadlessSystemUserMode
sẽ trả về true
). Ở chế độ Người dùng hệ thống không có giao diện người dùng, người dùng hệ thống là
người dùng ở chế độ nền và dựa vào người dùng trên nền trước bổ sung cho người dùng cuối
tương tác. Android 14 cũng ra mắt
chế độ liên kết với chủ sở hữu thiết bị không có giao diện người dùng
sẽ thêm Chủ sở hữu hồ sơ vào tất cả
người dùng liên kết
ngoài người dùng hệ thống mà Chủ sở hữu thiết bị đã được thiết lập.
Trong các thiết bị được định cấu hình cho người dùng hệ thống không có giao diện người dùng (khi người dùng hệ thống
chạy ở chế độ nền), chỉ các chính sách thiết bị có phạm vi áp dụng trên toàn cầu
(các chính sách áp dụng cho tất cả người dùng) được áp dụng cho người dùng trên nền trước
hoặc người dùng. Xem
addUserRestriction
để biết thông tin chi tiết.
Nhà sản xuất thiết bị Android có thể tham khảo hướng dẫn đã xuất bản trên source.android.com.
Tổng quan về API Quản trị thiết bị
Dưới đây là ví dụ về các loại ứng dụng có thể sử dụng API Quản trị thiết bị:
- Ứng dụng email.
- Ứng dụng bảo mật thực hiện xóa từ xa.
- Ứng dụng và dịch vụ quản lý thiết bị.
Cách thức hoạt động
Bạn sử dụng API Quản trị thiết bị để ghi ứng dụng quản trị thiết bị mà người dùng cài đặt trên thiết bị của họ. Ứng dụng quản trị thiết bị thực thi các thao tác mong muốn Google Cloud. Cách sử dụng dịch vụ này:
- Quản trị viên hệ thống viết ứng dụng quản trị thiết bị để thực thi chính sách bảo mật thiết bị từ xa/cục bộ. Những chính sách này có thể được mã hoá cứng thành ứng dụng hoặc ứng dụng có thể tìm nạp động các chính sách từ bên thứ ba máy chủ.
- Ứng dụng này được cài đặt trên máy chủ thiết bị. Android thì
hiện chưa có giải pháp cấp phép tự động. Một số cách mà quản trị viên hệ thống có thể
phân phối ứng dụng cho người dùng như sau:
- Google Play.
- Cho phép cài đặt từ cửa hàng khác.
- Phân phối ứng dụng qua các phương thức khác, chẳng hạn như email hoặc trang web.
- Hệ thống sẽ nhắc người dùng bật ứng dụng quản trị thiết bị. Cách thức và thời điểm điều này xảy ra phụ thuộc vào cách triển khai ứng dụng.
- Sau khi bật ứng dụng quản trị thiết bị, người dùng phải tuân theo các chính sách của Google. Việc tuân thủ các chính sách đó thường mang lại các lợi ích, chẳng hạn như quyền truy cập vào các hệ thống và dữ liệu nhạy cảm.
Nếu người dùng không bật ứng dụng quản trị thiết bị, thì ứng dụng vẫn sẽ xuất hiện trên thiết bị nhưng ở trạng thái không hoạt động. Người dùng sẽ không phải tuân theo chính sách của ứng dụng và ngược lại, họ sẽ không nhận được bất kỳ lợi ích nào của ứng dụng, ví dụ: có thể họ không đồng bộ hoá được dữ liệu.
Nếu người dùng không tuân thủ chính sách (ví dụ: nếu người dùng đặt vi phạm nguyên tắc), ứng dụng có quyền quyết định cách xử lý vấn đề này. Tuy nhiên, thông thường, điều này sẽ khiến người dùng không đồng bộ hoá dữ liệu được.
Nếu thiết bị cố gắng kết nối với một máy chủ yêu cầu các chính sách không được hỗ trợ trong API Quản trị thiết bị, kết nối sẽ không được phép. API Quản trị thiết bị hiện không cho phép một phần cấp phép. Nói cách khác, nếu một thiết bị (ví dụ: một thiết bị cũ) không hỗ trợ tất cả các chính sách đã nêu, không có cách nào để cho phép thiết bị để kết nối.
Nếu thiết bị chứa nhiều ứng dụng quản trị được bật, chính sách nghiêm ngặt nhất là thực thi. Không có cách nào để nhắm mục tiêu một quản trị viên cụ thể .
Để gỡ cài đặt một ứng dụng quản trị thiết bị hiện có, người dùng cần phải trước tiên, hãy huỷ đăng ký ứng dụng với tư cách quản trị viên.
Chính sách
Trong môi trường doanh nghiệp, các thiết bị của nhân viên thường phải tuân thủ một bộ chính sách nghiêm ngặt chi phối việc sử dụng thiết bị. Chiến lược phát hành đĩa đơn API Quản trị thiết bị hỗ trợ các chính sách nêu trong Bảng 1. Xin lưu ý rằng API Quản trị thiết bị hiện chỉ hỗ trợ mật khẩu cho màn hình khoá:
Policy | Mô tả |
---|---|
Đã bật mật khẩu | Thiết bị phải yêu cầu mã PIN hoặc mật khẩu. |
Độ dài mật khẩu tối thiểu | Đặt số lượng ký tự bắt buộc cho mật khẩu. Ví dụ: bạn có thể yêu cầu mã PIN hoặc mật khẩu có ít nhất 6 ký tự. |
Bắt buộc phải có mật khẩu bao gồm chữ và số | Yêu cầu mật khẩu có kết hợp chữ cái và số. Chúng có thể bao gồm các ký tự tượng trưng. |
Yêu cầu mật khẩu phức tạp | Yêu cầu mật khẩu phải chứa ít nhất một chữ cái, một chữ số và một ký hiệu đặc biệt. Ra mắt trong Android 3.0. |
Cần có số chữ cái tối thiểu trong mật khẩu | Số lượng tối thiểu các chữ cái bắt buộc trong mật khẩu đối với tất cả quản trị viên hoặc một quản trị viên cụ thể. Ra mắt trong Android 3.0. |
Cần có số lượng chữ thường tối thiểu trong mật khẩu | Số lượng chữ thường tối thiểu các chữ cái bắt buộc trong mật khẩu đối với tất cả quản trị viên hoặc một quản trị viên cụ thể. Ra mắt trong Android 3.0. |
Cần có tối thiểu ký tự không phải chữ cái trong mật khẩu | Số lượng tối thiểu bắt buộc phải có ký tự không phải chữ cái trong mật khẩu đối với tất cả quản trị viên hoặc một quản trị viên cụ thể. Ra mắt trong Android 3.0. |
Cần có số chữ số tối thiểu trong mật khẩu | Số lượng chữ số tối thiểu bắt buộc phải có trong mật khẩu đối với tất cả quản trị viên hoặc một số cụ thể. Ra mắt trong Android 3.0. |
Yêu cầu ký hiệu tối thiểu trong mật khẩu | Số lượng ký hiệu tối thiểu bắt buộc trong mật khẩu đối với tất cả quản trị viên hoặc một ký hiệu cụ thể. Ra mắt trong Android 3.0. |
Yêu cầu số lượng chữ hoa tối thiểu trong mật khẩu | Số lượng chữ hoa tối thiểu bắt buộc phải có trong mật khẩu đối với tất cả quản trị viên hoặc một số cụ thể. Ra mắt trong Android 3.0. |
Hết hạn mật khẩu | Thời điểm mật khẩu hết hạn, được biểu thị dưới dạng delta tính bằng mili giây kể từ khi quản trị viên thiết bị đặt thời gian chờ hết hạn. Ra mắt trong Android 3.0. |
Hạn chế nhật ký mật khẩu | Chính sách này ngăn người dùng sử dụng lại n mật khẩu riêng biệt gần đây nhất.
Chính sách này thường được sử dụng cùng với
setPasswordExpirationTimeout() , buộc
người dùng cập nhật mật khẩu của họ sau khi một khoảng thời gian xác định đã trôi qua.
Ra mắt trong Android 3.0. |
Số lần nhập mật khẩu không thành công tối đa | Chỉ định số lần người dùng có thể nhập sai mật khẩu trước khi xóa dữ liệu của thiết bị đó. API Quản trị thiết bị cũng cho phép quản trị viên đặt lại từ xa thiết bị về trạng thái mặc định ban đầu. Điều này giúp bảo mật dữ liệu trong trường hợp thiết bị bị mất hoặc bị đánh cắp. |
Khoá thời gian không hoạt động tối đa | Đặt khoảng thời gian kể từ lần cuối cùng người dùng chạm vào màn hình hoặc đã nhấn một nút trước khi thiết bị khoá màn hình. Khi điều này xảy ra, người dùng cần nhập lại mã PIN hoặc mật khẩu của mình trước khi trẻ có thể sử dụng thiết bị và truy cập vào dữ liệu. Giá trị có thể nằm trong khoảng từ 1 đến 60 phút. |
Yêu cầu mã hoá bộ nhớ | Chỉ định rằng khu vực lưu trữ phải được mã hoá nếu thiết bị hỗ trợ. Ra mắt trong Android 3.0. |
Tắt camera | Chỉ định xem có tắt máy ảnh hay không. Lưu ý rằng tham số này không có là vô hiệu hoá vĩnh viễn. Bạn có thể bật/tắt camera một cách linh động dựa trên bối cảnh, thời gian, v.v. Ra mắt trong Android 4.0. |
Tính năng khác
Ngoài việc hỗ trợ các chính sách được liệt kê trong bảng trên, Thiết bị API Quản trị cho phép bạn làm những việc sau:
- Nhắc người dùng đặt mật khẩu mới.
- Khoá thiết bị ngay lập tức.
- Xoá sạch dữ liệu trên thiết bị (tức là khôi phục thiết bị về trạng thái mặc định ban đầu).
Ứng dụng mẫu
Các ví dụ trên trang này dựa trên API Quản trị thiết bị
mẫu, được bao gồm trong mẫu SDK (có sẵn thông qua
Android SDK Manager) và nằm trên hệ thống của bạn dưới dạng
<sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java
.
Ứng dụng mẫu cung cấp bản minh hoạ các tính năng quản trị thiết bị. Tính năng này hiển thị cho người dùng có giao diện người dùng cho phép họ bật ứng dụng quản trị thiết bị. Một lần người dùng đã bật ứng dụng, họ có thể sử dụng các nút trong giao diện người dùng để làm như sau:
- Thiết lập chất lượng mật khẩu.
- Chỉ định các yêu cầu đối với mật khẩu của người dùng, chẳng hạn như độ dài tối thiểu, số lượng mật khẩu tối thiểu ký tự số cần có, v.v.
- Đặt mật khẩu. Nếu mật khẩu không tuân theo thì hệ thống sẽ trả về lỗi.
- Đặt số lần thử mật khẩu không thành công có thể xảy ra trước khi thiết bị bị xóa (tức là được khôi phục về trạng thái cài đặt ban đầu).
- Đặt khoảng thời gian kể từ bây giờ mật khẩu sẽ hết hạn.
- Đặt độ dài lịch sử mật khẩu (độ dài đề cập đến số lượng mật khẩu cũ được lưu trữ trong lịch sử). Điều này ngăn người dùng sử dụng lại một trong n mật khẩu gần đây nhất mà họ đã sử dụng trước đó.
- Chỉ định rằng khu vực lưu trữ phải được mã hoá nếu thiết bị hỗ trợ.
- Đặt thời lượng tối đa không hoạt động có thể trôi qua trước thiết bị .
- Khoá thiết bị ngay lập tức.
- Xoá sạch dữ liệu của thiết bị (tức là khôi phục cài đặt gốc).
- Tắt camera.
Phát triển một ứng dụng quản trị thiết bị
Quản trị viên hệ thống có thể sử dụng API Quản trị thiết bị để viết ứng dụng để thực thi chính sách bảo mật thiết bị từ xa/cục bộ. Phần này tóm tắt các bước liên quan đến việc tạo một chương trình quản trị thiết bị .
Tạo tệp kê khai
Để sử dụng API Quản trị thiết bị, tệp kê khai phải bao gồm những thông tin sau:
- Một lớp con của
DeviceAdminReceiver
bao gồm các thành phần sau:- Quyền
BIND_DEVICE_ADMIN
. - Khả năng phản hồi
ACTION_DEVICE_ADMIN_ENABLED
ý định được biểu thị trong tệp kê khai dưới dạng bộ lọc ý định.
- Quyền
- Nội dung khai báo về chính sách bảo mật dùng trong siêu dữ liệu.
Dưới đây là phần trích dẫn từ tệp kê khai mẫu Quản trị thiết bị:
<activity android:name=".app.DeviceAdminSample" android:label="@string/activity_sample_device_admin"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.SAMPLE_CODE" /> </intent-filter> </activity> <receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver" android:label="@string/sample_device_admin" android:description="@string/sample_device_admin_description" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin_sample" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
Lưu ý:
- Các thuộc tính sau đây tham chiếu đến các tài nguyên chuỗi dành cho ứng dụng mẫu
ApiDemos/res/values/strings.xml
. Để biết thêm thông tin về các tài nguyên, hãy xem Tài nguyên ứng dụng.android:label="@string/activity_sample_device_admin"
đề cập đến nhãn mà người dùng đọc được cho hoạt động.android:label="@string/sample_device_admin"
đề cập đến nhãn mà người dùng đọc được cho quyền đó.android:description="@string/sample_device_admin_description"
đề cập đến nội dung mô tả quyền dễ đọc cho người dùng. Phần mô tả thường dài hơn và nhiều thông tin hơn một nhãn.
android:permission="android.permission.BIND_DEVICE_ADMIN"
là một quyền mà lớp conDeviceAdminReceiver
phải có để đảm bảo rằng chỉ hệ thống mới có thể tương tác với trình nhận (không ứng dụng nào có thể được cấp quyền này). Chiến dịch này ngăn các ứng dụng khác lạm dụng ứng dụng quản trị thiết bị của bạn.android.app.action.DEVICE_ADMIN_ENABLED
là gói chính hành động mà lớp conDeviceAdminReceiver
phải xử lý được phép quản lý một thiết bị. Giá trị này được đặt cho receiver khi người dùng bật ứng dụng quản trị thiết bị. Mã của bạn thường xử lý việc này trongonEnabled()
. Để được hỗ trợ, người nhận cũng phải yêu cầu quyềnBIND_DEVICE_ADMIN
để các ứng dụng khác không thể lạm dụng quảng cáo này.- Khi người dùng bật ứng dụng quản trị thiết bị, ứng dụng này sẽ cung cấp cho receiver quyền thực hiện các hành động để phản hồi thông báo phát sóng của hệ thống cụ thể các sự kiện. Khi sự kiện phù hợp phát sinh, ứng dụng có thể áp dụng một chính sách. Cho ví dụ: nếu người dùng cố đặt mật khẩu mới không tuân thủ chính sách theo yêu cầu của bạn, ứng dụng có thể nhắc người dùng chọn một mật khẩu khác đáp ứng các yêu cầu.
- Tránh thay đổi tên người nhận sau khi phát hành ứng dụng. Nếu tên trong phần
thay đổi trong tệp kê khai, tính năng quản trị thiết bị bị tắt khi người dùng cập nhật ứng dụng. Để tìm hiểu thêm, hãy xem
<receiver>
. android:resource="@xml/device_admin_sample"
khai báo chính sách bảo mật dùng trong siêu dữ liệu. Siêu dữ liệu này cung cấp thêm thông tin dành riêng cho quản trị viên thiết bị, như được lớpDeviceAdminInfo
phân tích cú pháp. Sau đây là nội dung củadevice_admin_sample.xml
:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> <watch-login /> <reset-password /> <force-lock /> <wipe-data /> <expire-password /> <encrypted-storage /> <disable-camera /> </uses-policies> </device-admin>
Khi thiết kế ứng dụng quản trị thiết bị, bạn không cần bao gồm tất cả các chính sách, chỉ những chính sách có liên quan đến ứng dụng của bạn.
Để thảo luận thêm về tệp kê khai, hãy xem Hướng dẫn dành cho nhà phát triển Android.Triển khai mã
API Quản trị thiết bị bao gồm các lớp sau:
DeviceAdminReceiver
- Lớp cơ sở để triển khai thành phần quản trị thiết bị. Lớp này cung cấp
để thuận tiện cho việc diễn giải các thao tác theo ý định thô được gửi bởi
hệ thống. Ứng dụng Quản trị thiết bị của bạn phải bao gồm một
Lớp con
DeviceAdminReceiver
. DevicePolicyManager
- Một lớp để quản lý các chính sách được thực thi trên thiết bị. Hầu hết khách hàng của
lớp này phải xuất bản một
DeviceAdminReceiver
mà người dùng hiện đã được bật.DevicePolicyManager
quản lý các chính sách đối với một hoặc nhiều thực thểDeviceAdminReceiver
DeviceAdminInfo
- Lớp này dùng để chỉ định siêu dữ liệu cho thành phần quản trị viên thiết bị.
Các lớp này cung cấp nền tảng cho một ứng dụng quản trị thiết bị với đầy đủ chức năng.
Phần còn lại của phần này mô tả cách bạn sử dụng DeviceAdminReceiver
và
Các API DevicePolicyManager
để viết ứng dụng quản trị thiết bị.
Phân loại phụ DeviceAdminReceiver
Để tạo ứng dụng quản trị thiết bị, bạn phải thêm lớp con
DeviceAdminReceiver
. Lớp DeviceAdminReceiver
bao gồm một loạt lệnh gọi lại được kích hoạt khi các sự kiện cụ thể
xảy ra.
Trong lớp con DeviceAdminReceiver
, ứng dụng mẫu
chỉ hiển thị thông báo Toast
để phản hồi lại
các sự kiện. Ví dụ:
Kotlin
class DeviceAdminSample : DeviceAdminReceiver() { private fun showToast(context: Context, msg: String) { context.getString(R.string.admin_receiver_status, msg).let { status -> Toast.makeText(context, status, Toast.LENGTH_SHORT).show() } } override fun onEnabled(context: Context, intent: Intent) = showToast(context, context.getString(R.string.admin_receiver_status_enabled)) override fun onDisableRequested(context: Context, intent: Intent): CharSequence = context.getString(R.string.admin_receiver_status_disable_warning) override fun onDisabled(context: Context, intent: Intent) = showToast(context, context.getString(R.string.admin_receiver_status_disabled)) override fun onPasswordChanged(context: Context, intent: Intent, userHandle: UserHandle) = showToast(context, context.getString(R.string.admin_receiver_status_pw_changed)) ... }
Java
public class DeviceAdminSample extends DeviceAdminReceiver { void showToast(Context context, String msg) { String status = context.getString(R.string.admin_receiver_status, msg); Toast.makeText(context, status, Toast.LENGTH_SHORT).show(); } @Override public void onEnabled(Context context, Intent intent) { showToast(context, context.getString(R.string.admin_receiver_status_enabled)); } @Override public CharSequence onDisableRequested(Context context, Intent intent) { return context.getString(R.string.admin_receiver_status_disable_warning); } @Override public void onDisabled(Context context, Intent intent) { showToast(context, context.getString(R.string.admin_receiver_status_disabled)); } @Override public void onPasswordChanged(Context context, Intent intent, UserHandle userHandle) { showToast(context, context.getString(R.string.admin_receiver_status_pw_changed)); } ... }
Bật ứng dụng
Một trong những sự kiện chính mà ứng dụng quản trị thiết bị phải xử lý là người dùng bật ứng dụng. Người dùng phải bật ứng dụng một cách rõ ràng để các chính sách cần thực thi. Nếu người dùng chọn không bật ứng dụng thì chính sách đó sẽ vẫn xuất hiện trên thiết bị nhưng chính sách của thiết bị sẽ không được thực thi và người dùng sẽ không nhận được mọi lợi ích của ứng dụng đó.
Quá trình bật ứng dụng bắt đầu khi người dùng thực hiện một
hành động kích hoạt ACTION_ADD_DEVICE_ADMIN
ý định. Trong
ứng dụng mẫu, điều này xảy ra khi người dùng nhấp vào nút Bật
Admin (Quản trị).
Khi người dùng nhấp vào hộp đánh dấu Bật quyền quản trị, màn hình hiển thị các thay đổi để nhắc người dùng kích hoạt ứng dụng quản trị thiết bị, như minh hoạ trong hình 2.
Dưới đây là mã sẽ được thực thi khi người dùng nhấp vào hộp đánh dấu Bật tính năng quản trị. Điều này có tác dụng kích hoạt
onPreferenceChange()
. Lệnh gọi lại này được gọi khi giá trị của Preference
này đã được người dùng thay đổi và sắp được đặt và/hoặc duy trì. Nếu người dùng đang bật ứng dụng, màn hình
các thay đổi để nhắc người dùng kích hoạt ứng dụng quản trị thiết bị, như minh hoạ trong hình
2. Nếu không, ứng dụng quản trị thiết bị sẽ bị tắt.
Kotlin
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean { if (super.onPreferenceChange(preference, newValue)) return true val value = newValue as Boolean if (preference == enableCheckbox) { if (value != adminActive) { if (value) { // Launch the activity to have the user enable our admin. val intent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN).apply { putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample) putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, activity.getString(R.string.add_admin_extra_app_text)) } startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN) // return false - don't update checkbox until we're really active return false } else { dpm.removeActiveAdmin(deviceAdminSample) enableDeviceCapabilitiesArea(false) adminActive = false } } } else if (preference == disableCameraCheckbox) { dpm.setCameraDisabled(deviceAdminSample, value) } return true }
Java
@Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (super.onPreferenceChange(preference, newValue)) { return true; } boolean value = (Boolean) newValue; if (preference == enableCheckbox) { if (value != adminActive) { if (value) { // Launch the activity to have the user enable our admin. Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, activity.getString(R.string.add_admin_extra_app_text)); startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN); // return false - don't update checkbox until we're really active return false; } else { dpm.removeActiveAdmin(deviceAdminSample); enableDeviceCapabilitiesArea(false); adminActive = false; } } } else if (preference == disableCameraCheckbox) { dpm.setCameraDisabled(deviceAdminSample, value); } return true; }
Đường kẻ
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
mDeviceAdminSample)
cho biết rằng mDeviceAdminSample
(là
thành phần DeviceAdminReceiver
) là chính sách mục tiêu.
Dòng này gọi giao diện người dùng như trong hình 2 để hướng dẫn người dùng
thêm quản trị viên thiết bị vào hệ thống (hoặc cho phép họ từ chối quản trị viên thiết bị).
Khi ứng dụng cần thực hiện một thao tác phụ thuộc vào
đang bật ứng dụng quản trị thiết bị, xác nhận rằng ứng dụng này đang
đang hoạt động. Để thực hiện việc này, hệ thống sẽ sử dụng phương thức DevicePolicyManager
isAdminActive()
Lưu ý rằng DevicePolicyManager
phương thức isAdminActive()
lấy DeviceAdminReceiver
thành phần làm đối số:
Kotlin
private lateinit var dpm: DevicePolicyManager ... private fun isActiveAdmin(): Boolean = dpm.isAdminActive(deviceAdminSample)
Java
DevicePolicyManager dpm; ... private boolean isActiveAdmin() { return dpm.isAdminActive(deviceAdminSample); }
Quản lý chính sách
DevicePolicyManager
là một lớp công khai để quản lý chính sách
thực thi trên thiết bị. DevicePolicyManager
quản lý chính sách cho một
hoặc nhiều thực thể DeviceAdminReceiver
khác.
Bạn sẽ xử lý DevicePolicyManager
như sau:
Kotlin
dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
Java
DevicePolicyManager dpm = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
Phần này mô tả cách sử dụng DevicePolicyManager
để thực hiện
công việc quản trị:
Đặt chính sách mật khẩu
DevicePolicyManager
bao gồm các API để thiết lập và thực thi chính sách
chính sách mật khẩu của thiết bị. Trong API Quản trị thiết bị, mật khẩu chỉ áp dụng cho
phương thức khoá màn hình. Phần này mô tả các tác vụ phổ biến liên quan đến mật khẩu.
Đặt mật khẩu cho thiết bị
Mã này hiển thị giao diện người dùng nhắc người dùng đặt mật khẩu:
Kotlin
Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent -> startActivity(intent) }
Java
Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD); startActivity(intent);
Đặt chất lượng mật khẩu
Chất lượng mật khẩu có thể là một trong các hằng số DevicePolicyManager
sau:
PASSWORD_QUALITY_ALPHABETIC
- Người dùng phải nhập mật khẩu chứa ít nhất ký tự chữ cái (hoặc các ký hiệu khác).
PASSWORD_QUALITY_ALPHANUMERIC
- Người dùng phải nhập mật khẩu chứa ít nhất cả số và chữ cái (hoặc ký tự khác).
PASSWORD_QUALITY_NUMERIC
- Người dùng phải nhập mật khẩu có ít nhất ký tự số.
PASSWORD_QUALITY_COMPLEX
- Người dùng Bạn phải nhập mật khẩu có chứa ít nhất một chữ cái, một chữ số và một biểu tượng đặc biệt.
PASSWORD_QUALITY_SOMETHING
- Các chính sách yêu cầu loại nào đó nhưng không quan tâm đến mật khẩu đó là gì.
PASSWORD_QUALITY_UNSPECIFIED
- Chính sách này không yêu cầu về mật khẩu.
Ví dụ: dưới đây là cách bạn có thể đặt chính sách mật khẩu để yêu cầu mật khẩu bao gồm chữ và số:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
Đặt yêu cầu về nội dung mật khẩu
Kể từ Android 3.0, lớp DevicePolicyManager
bao gồm các phương thức cho phép bạn tinh chỉnh nội dung của mật khẩu. Cho
Ví dụ: bạn có thể đặt một chính sách nêu rõ rằng mật khẩu phải chứa ít nhất
n chữ hoa. Sau đây là các phương pháp tinh chỉnh mật khẩu
nội dung:
setPasswordMinimumLetters()
setPasswordMinimumLowerCase()
setPasswordMinimumUpperCase()
setPasswordMinimumNonLetter()
setPasswordMinimumNumeric()
setPasswordMinimumSymbols()
Ví dụ: đoạn mã này cho biết mật khẩu phải có ít nhất 2 chữ cái viết hoa:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwMinUppercase = 2 ... dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; int pwMinUppercase = 2; ... dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase);
Đặt độ dài mật khẩu tối thiểu
Bạn có thể chỉ định rằng mật khẩu ít nhất phải là mật khẩu tối thiểu được chỉ định thời lượng. Ví dụ:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwLength: Int = ... ... dpm.setPasswordMinimumLength(deviceAdminSample, pwLength)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; int pwLength; ... dpm.setPasswordMinimumLength(deviceAdminSample, pwLength);
Đặt số lần nhập mật khẩu không thành công tối đa
Bạn có thể đặt số lần nhập sai mật khẩu tối đa được phép trước khi thiết bị đã bị xoá sạch (tức là đặt lại về trạng thái cài đặt ban đầu). Ví dụ:
Kotlin
val dPM:DevicePolicyManager private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val maxFailedPw: Int = ... ... dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; int maxFailedPw; ... dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw);
Đặt thời gian chờ hết hạn mật khẩu
Kể từ Android 3.0, bạn có thể sử dụng
setPasswordExpirationTimeout()
để đặt thời điểm mật khẩu hết hạn, được biểu thị dưới dạng delta tính bằng mili giây kể từ khi quản trị viên thiết bị đặt thời gian chờ hết hạn. Ví dụ:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwExpiration: Long = ... ... dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; long pwExpiration; ... dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration);
Hạn chế mật khẩu dựa trên nhật ký
Kể từ Android 3.0, bạn có thể sử dụng
setPasswordHistoryLength()
để giới hạn thời gian
khả năng sử dụng lại mật khẩu cũ. Phương thức này mất độ dài
Tham số này sẽ chỉ định số lượng
mật khẩu sẽ được lưu trữ. Khi chính sách này có hiệu lực, người dùng sẽ không thể nhập
khớp với n mật khẩu gần đây nhất. Điều này giúp ngăn chặn
người dùng sử dụng nhiều lần cùng một mật khẩu. Chính sách này thường được sử dụng
liên kết với
setPasswordExpirationTimeout()
,
buộc người dùng
cập nhật mật khẩu của họ sau khi một khoảng thời gian nhất định đã trôi qua.
Ví dụ: đoạn mã này cấm người dùng sử dụng lại bất kỳ mật khẩu nào trong số 5 mật khẩu cuối cùng của họ:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwHistoryLength = 5 ... dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; int pwHistoryLength = 5; ... dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength);
Đặt phương thức khoá thiết bị
Bạn có thể đặt khoảng thời gian người dùng không hoạt động tối đa có thể xảy ra trước phương thức khoá thiết bị. Ví dụ:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val timeMs: Long = 1000L * timeout.text.toString().toLong() ... dpm.setMaximumTimeToLock(deviceAdminSample, timeMs)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... long timeMs = 1000L*Long.parseLong(timeout.getText().toString()); dpm.setMaximumTimeToLock(deviceAdminSample, timeMs);
Bạn cũng có thể lập trình để yêu cầu thiết bị khoá ngay lập tức:
Kotlin
private lateinit var dpm: DevicePolicyManager dpm.lockNow()
Java
DevicePolicyManager dpm; dpm.lockNow();
Thực hiện xoá sạch dữ liệu
Bạn có thể sử dụng phương thức DevicePolicyManager
wipeData()
để đặt lại thiết bị về trạng thái cài đặt ban đầu. Thông tin này hữu ích
nếu thiết bị bị mất hoặc bị đánh cắp. Thông thường, quyết định xoá sạch thiết bị là
kết quả của việc đáp ứng một số điều kiện nhất định. Ví dụ: bạn có thể sử dụng
setMaximumFailedPasswordsForWipe()
để cho biết rằng một thiết bị phải
bị xoá sau một số lần thử mật khẩu không thành công.
Bạn có thể xoá sạch dữ liệu như sau:
Kotlin
private lateinit var dpm: DevicePolicyManager dpm.wipeData(0)
Java
DevicePolicyManager dpm; dpm.wipeData(0);
Phương thức wipeData()
nhận làm
cho tham số mặt nạ bit của các tuỳ chọn bổ sung. Hiện tại, giá trị phải là 0.
Tắt camera
Kể từ Android 4.0, bạn có thể tắt camera. Xin lưu ý rằng không nhất thiết phải vô hiệu hoá vĩnh viễn tính năng này. Bạn có thể bật/tắt camera một cách linh hoạt dựa trên ngữ cảnh, thời gian, v.v.
Bạn có thể kiểm soát việc có tắt camera hay không bằng cách sử dụng
setCameraDisabled()
. Ví dụ: đoạn mã này đặt camera thành bật hoặc tắt dựa trên chế độ cài đặt hộp đánh dấu:
Kotlin
private lateinit var disableCameraCheckbox: CheckBoxPreference private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked)
Java
private CheckBoxPreference disableCameraCheckbox; DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked());
Mã hoá bộ nhớ
Kể từ Android 3.0, bạn có thể sử dụng
setStorageEncryption()
để đặt một chính sách yêu cầu mã hoá khu vực lưu trữ (nếu được hỗ trợ).
Ví dụ:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setStorageEncryption(deviceAdminSample, true)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setStorageEncryption(deviceAdminSample, true);
Hãy xem mẫu API Quản trị thiết bị để biết ví dụ đầy đủ về cách bật tính năng mã hoá bộ nhớ.
Mã mẫu khác
Android AppRestrictionEnforcer và DeviceOwner mẫu minh hoạ thêm về việc sử dụng các API được đề cập trên trang này.