Đố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ũ qua mạng chuyển mạch vòng 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 phương thức 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 nhà cung cấp triển khai cung cấp thông tin báo hiệu, chẳng hạn như miền đặt các cuộc gọi đi và SMS cũng như lựa chọn ưu tiên về 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 lựa chọn miền
Ví dụ và nguồn
Android cung cấp phương thức 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 lựa chọn miền trên thiết bị Android, bạn cần thực hiện các bước sau:
Tạo ứng dụng lựa chọn miền. Bạn phải xác định dịch vụ trong tệp
AndroidManifest.xml
.Thêm 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 quá trình triển khai
DomainSelectionService
.Hỗ trợ giao diện HAL vô tuyến 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ụ trong AndroidManifest.xml
Để ứng dụng lựa chọn miền đăng ký dịch vụ DomainSelectionService
với khung, hãy thêm mục nhập dịch vụ trong tệp kê khai theo đị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 lựa chọn miền hoạt động.
directBootAware="true"
: Cho phép dịch vụ được phát hiện và chạy bằng điện thoại 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 ứng dụng hệ thống.permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE"
: Đảm bảo rằng chỉ một quy trình đã được cấp quyềnBIND_DOMAIN_SELECTION_SERVICE
mới có thể liên kết với ứng dụng. Điều này ngăn một ứng dụng giả mạo liên kết với dịch vụ vì chỉ khung này mới có thể cấp quyền cho các ứng dụng hệ thống.
Dịch vụ cũng phải chỉ định phần tử intent-filter
bằng thao tác android.telephony.DomainSelectionService
. Việc này cho phép khung tìm 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 (một chuỗiComponentName
được làm phẳng) cho dịch vụDomainSelectionService
Vì Android không hỗ trợ các ứng dụng có 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à ứ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ợ giao diện HAL của đài
Để bật tính năng lựa chọn miền, hãy hỗ trợ các giao diện HAL radio 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ử khung điện thoại phản hồi đúng cách với giao diện DomainSelectionService
, hãy chạy các chương trình kiểm thử CTS trong DomainSelectionServiceTestOnMockModem
.