Trong Android 6 trở lên, các nhà cung cấp dịch vụ Wi-Fi và trình phân tích gói bị hạn chế truy xuất địa chỉ MAC ban đầu của thiết bị thông qua ngăn xếp Wi-Fi từ các yêu cầu mạng. Kể từ Android 10, chúng tôi đã áp dụng thêm các quy định hạn chế để giới hạn quyền truy cập vào giá trị nhận dạng (ID) của thiết bị cho các ứng dụng có cấp độ quyền đặc quyền. Việc này giúp bảo vệ mã thiết bị, chẳng hạn như
- số IMEI, MEID, ESN và IMSI của điện thoại.
- số sê-ri của bản dựng, SIM hoặc USB.
Ai có thể truy cập vào mã thiết bị
Mã thiết bị bị hạn chế trên tất cả thiết bị Android 10, ngay cả khi ứng dụng nhắm đến Android 9 trở xuống. Mã thiết bị có thể được truy cập bằng:
- Ứng dụng SMS mặc định.
- Ứng dụng có cả quyền
READ_PRIVILEGED_PHONE_STATE
trong lớpManifest.permission
và danh sách cho phép trong tệpprivapp-permission.xml
. Các tệp này cũng phải được tải trong thư mụcpriv-app
. - Ứng dụng có đặc quyền của nhà mạng như được xác định trong phần Đặc quyền của nhà mạng UICC.
- Chủ sở hữu thiết bị hoặc chủ sở hữu hồ sơ có quyền
READ_PHONE_STATE
được cấp trong lớpManifest.permission
. (Bạn không bắt buộc phải thêm vào danh sách cho phép.)
Quyền truy cập vào gói đặc quyền
Gói phải có đặc quyền truy cập vào mã thiết bị. Tệp này phải có quyền
READ_PRIVILEGED_PHONE_STATE
trong lớp Manifest.permission
và được đưa vào danh sách cho phép trong tệp privapp-permission.xml
. Để biết thông tin về quy trình đưa vào danh sách cho phép, hãy xem phần Đưa quyền đặc quyền vào danh sách cho phép.
Để biết thông tin về cách lấy mã nhận dạng duy nhất cho một gói không đặc quyền, hãy tham khảo Các trường hợp sử dụng phổ biến và giá trị nhận dạng thích hợp để sử dụng.
Mã thiết bị bị hạn chế và địa chỉ MAC được tạo ngẫu nhiên
Để hạn chế thêm mã thiết bị, tất cả thiết bị trên Android 10 đều truyền địa chỉ MAC ngẫu nhiên theo mặc định cho cả yêu cầu thăm dò và yêu cầu liên quan, đồng thời phải có một địa chỉ MAC ngẫu nhiên khác nhau cho mỗi SSID. Không sử dụng địa chỉ MAC của nhà sản xuất thiết bị ở chế độ ứng dụng, điểm truy cập mềm (AP) hoặc trường hợp sử dụng Wi-Fi Direct. API này phải luôn ẩn khỏi các API có thể truy cập công khai không phải là ứng dụng đặc quyền. Các ứng dụng đặc quyền yêu cầu trả về địa chỉ MAC ban đầu phải có quyền LOCAL_MAC_ADDRESS
.
Người dùng có thể chọn giữ lại địa chỉ MAC ngẫu nhiên mặc định được chỉ định cho từng SSID. Bạn có thể xem tuỳ chọn này trong phần Quyền riêng tư trong mục Cài đặt > Chi tiết mạng. Để tìm hiểu về cách lấy địa chỉ MAC ngẫu nhiên, hãy xem bài viết Địa chỉ MAC ngẫu nhiên.

Hình 1. Địa chỉ MAC hiển thị dưới dạng ngẫu nhiên trong phần Quyền riêng tư trong phần Thông tin chi tiết về mạng.
Ứng dụng gọi API mã thiết bị
Các ứng dụng gọi API mã thiết bị phải đáp ứng các yêu cầu của Android 10. Nếu không, khi họ cố gắng truy cập vào mã thiết bị, hệ thống sẽ trả về kết quả sau:
- Ứng dụng nhắm đến Android 10
SecurityException
được gửi từ các API mã thiết bị.- Ứng dụng nhắm đến Android 9 trở xuống
- Nếu họ có quyền
READ_PHONE_STATE
, hệ thống sẽ trả về phản hồinull
hoặc dữ liệu phần giữ chỗ. - Nếu không, các API mã thiết bị sẽ gửi
SecurityException
chứa tên của phương thức được gọi và thông báo cho biết ứng dụng gọi không đáp ứng các yêu cầu để truy cập vào mã nhận dạng được yêu cầu.
Để biết thêm về mã thiết bị không thể thay đổi, hãy xem bài viết Mã thiết bị không thể đặt lại và các phương pháp hay nhất cho giá trị nhận dạng duy nhất.
Thử nghiệm
Ứng dụng phải bị ngăn truy cập vào số sê-ri thiết bị và (nếu có) IMEI hoặc MEID, số sê-ri SIM và mã nhận dạng người đăng ký. Các ứng dụng có quyền truy cập vào mã nhận dạng này cũng phải đáp ứng một trong các tiêu chí được liệt kê trong phần Ai có thể truy cập vào mã nhận dạng thiết bị.