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ũ 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.

domain-selection-architecture

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:

  1. 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.

  2. 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.

  3. 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ế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 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ền BIND_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ị:

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:

  • 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 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.