Đố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 cách triển khai tham chiếu cho tính năng chọn miền trong 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ị Android, bạn phải 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 HAL radio bắt buộc 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"
: Đảm bảo 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 để đảm bảo 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 phát
Để 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ử CTS trong DomainSelectionServiceTestOnMockModem
.