Đối với các thiết bị chạy Android 15 trở lên, bạn có thể triển khai lựa chọn miền giữa dịch vụ IMS và các dịch vụ cũ trên mạng chuyển mạch bằng API hệ thống DomainSelectionService. DomainSelectionService là một giao diện được xác định rõ ràng giữa nền tảng Android và một chế độ triển khai lựa chọn miền do nhà cung cấp cung cấp. Giao diện này cho phép việc triển khai của nhà cung cấp cung cấp thông tin báo hiệu (chẳng hạn như miền mà các cuộc gọi đi và SMS được đặt và lựa chọn ưu tiên loại mạng trong quá trình quét mạng) cho nền tảng.
Hình 1. Sơ đồ cấu trúc cho tính năng chọn miền
Ví dụ và nguồn
Android cung cấp một quy trình triển khai tham chiếu cho tính năng chọn miền trong Dự án nguồn mở Android (AOSP) tại TelephonyDomainSelectionService.
Để biết tài liệu chi tiết về API DomainSelectionService, hãy xem DomainSelectionService và các lớp khác trong API.
Triển khai
Để triển khai tính năng chọn miền trên thiết bị chạy Android, bạn cần thực hiện các bước sau:
Tạo một ứng dụng chọn miền. Dịch vụ này phải được xác định trong tệp
AndroidManifest.xml.Thêm một cấu hình vào lớp phủ thiết bị để cho phép nền tảng liên kết với việc triển khai
DomainSelectionService.Hỗ trợ các giao diện lớp trừu tượng phần cứng (HAL) cần thiết cho đài cho tính năng chọn miền.
Phần này cung cấp thêm thông tin chi tiết về các bước này.
Thêm mục nhập dịch vụ vào AndroidManifest.xml
Để ứng dụng chọn miền của bạn đăng ký dịch vụ DomainSelectionService với khung, hãy thêm một mục nhập dịch vụ vào tệp kê khai bằng cách sử dụng định dạng sau:
<service
android:name="com.example.domainselection.DomainSelectionService"
android:directBootAware="true"
android:persistent="true"
…
android:permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE"
…
<intent-filter>
<action android:name="android.telephony.DomainSelectionService"/>
</intent-filter>
…
</service>
Định nghĩa dịch vụ trong AndroidManifest.xml phải xác định các thuộc tính sau để tính năng chọn miền hoạt động:
directBootAware="true": Cho phép dịch vụ được dịch vụ điện thoại phát hiện và chạy trước khi người dùng mở khoá thiết bị. Dịch vụ không thể truy cập vào bộ nhớ được mã hoá trên thiết bị trước khi người dùng mở khoá thiết bị. Để biết thêm thông tin, hãy xem phần Hỗ trợ chế độ Khởi động trực tiếp và Mã hoá dựa trên tệp.persistent="true": Cho phép dịch vụ chạy liên tục và không bị hệ thống tắt để thu hồi bộ nhớ. Thuộc tính này chỉ hoạt động nếu ứng dụng được tạo dưới dạng một ứng dụng hệ thống.permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE": Xác minh rằng chỉ quy trình có quyềnBIND_DOMAIN_SELECTION_SERVICEđược cấp mới có thể liên kết với ứng dụng. Điều này ngăn chặn một ứng dụng giả mạo liên kết với dịch vụ, vì chỉ các ứng dụng hệ thống mới có thể được cấp quyền này theo khung.
Dịch vụ này cũng phải chỉ định phần tử intent-filter bằng thao tác android.telephony.DomainSelectionService. Điều này cho phép khung tìm thấy dịch vụ DomainSelectionService.
Xác định cấu hình trong lớp phủ thiết bị
Để nền tảng liên kết an toàn với dịch vụ DomainSelectionService, hãy thêm cấu hình sau vào lớp phủ thiết bị:
config_domain_selection_service_component_name: Tên thành phần (chuỗiComponentNameđược làm phẳng) cho dịch vụDomainSelectionService.
Vì Android không hỗ trợ các ứng dụng có chế độ triển khai DomainSelectionService có thể tải xuống của bên thứ ba, nên ứng dụng chọn miền phải là một ứng dụng hệ thống nằm trong thư mục /system_ext/priv-app/ hoặc /product/priv-app/. Khung này xác minh xem tên gói của quá trình triển khai có khớp với giá trị lớp phủ thiết bị hay không để xác minh rằng chỉ các ứng dụng đáng tin cậy, được cài đặt sẵn mới được liên kết.
Hỗ trợ các giao diện HAL của đài
Để bật tính năng chọn miền, hãy hỗ trợ các giao diện HAL vô tuyến bắt buộc sau:
-
void setEmergencyMode(int serial, EmergencyMode emcModeType); void triggerEmergencyNetworkScan(int serial, EmergencyNetworkScanTrigger request); void cancelEmergencyNetworkScan(int serial, boolean resetScan); void exitEmergencyMode(int serial); -
void emergencyNetworkScanResult(RadioIndicationType type, EmergencyRegResult result);
Xác nhận kết quả
Để kiểm thử xem khung điện thoại có phản hồi đúng cách với giao diện DomainSelectionService hay không, hãy chạy các kiểm thử Bộ kiểm tra tính tương thích (CTS) trong DomainSelectionServiceTestOnMockModem.