Dịch vụ chọn miền

Đố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 mạch sử dụng API hệ thống DomainSelectionService. DomainSelectionService là giao diện được xác định rõ ràng giữa nền tảng Android và nhà cung cấp được cung cấp triển khai lựa chọn miền. Giao diện này cho phép triển khai nhà cung cấp cung cấp thông tin tín hiệu, chẳng hạn như miền của các cuộc gọi đi và tin nhắn SMS và 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.

cấu trúc lựa chọn miền

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 cách triển khai tham chiếu cho tính năng chọn miền trong AOSP (Dự án nguồn mở Android) tại TelephonyDomainSelectionService. Để biết thông tin chi tiết tài liệu 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, hãy làm như sau các bước cần thiết:

  1. Tạo một ứng dụng chọn miền. Dịch vụ phải được xác định trong Tệp AndroidManifest.xml.

  2. 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 Triển khai DomainSelectionService.

  3. 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 dịch vụ trong AndroidManifest.xml

Để ứng dụng chọn miền của bạn có thể đăng ký dịch vụ DomainSelectionService với khung này, 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 đoạn mã sau định dạng:

<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 những điều sau để tính năng chọn miền hoạt động.

  • directBootAware="true": Cho phép dịch vụ được khám phá và chạy bởi đ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 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 của bạn, hãy xem phần Hỗ trợ chế độ Khởi động trực tiếpMã 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 loại bỏ để lấy lạ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ó quyền BIND_DOMAIN_SELECTION_SERVICE được cấp cho nó có thể liên kết với ứng dụng. Thao tác này ngăn một ứng dụng lừa đả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 khung.

Dịch vụ cũng phải chỉ định phần tử intent-filter có phần tử Hành động android.telephony.DomainSelectionService. Điều 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 đây cho lớp phủ thiết bị:

Vì Android không hỗ trợ những ứng dụng có thể tải xuống được của bên thứ ba DomainSelectionService, thì ứng dụng chọn miền phải là ứng dụng hệ thống nằm trong /system_ext/priv-app/ hoặc /product/priv-app/ . Khung sẽ xác minh xem tên gói của hoạt động triển khai khớp với giá trị lớp phủ của thiết bị để đảm bảo chỉ những ứng dụng được cài đặt trước đáng tin cậy bị ràng buộc.

Hỗ trợ giao diện HAL (Lớp trừu tượng phần cứng) cho đài

Để bật tính năng chọn miền, hãy hỗ trợ lớp trừu tượng phần cứng (HAL) cần có sau đây giao diện:

  • IRadioNetwork

    void setEmergencyMode(int serial, EmergencyMode emcModeType);
    void triggerEmergencyNetworkScan(int serial,
            EmergencyNetworkScanTrigger request);
    void cancelEmergencyNetworkScan(int serial, boolean resetScan);
    void exitEmergencyMode(int serial);
    
  • IRadioNetworkIndication

    void emergencyNetworkScanResult(RadioIndicationType type,
            EmergencyRegResult result);
    

Xác nhận kết quả

Để kiểm tra xem khung điện thoại có phản hồi đúng cách với DomainSelectionService, chạy các bài kiểm thử CTS trong DomainSelectionServiceTestOnMockModem.