Cấu hình của nhà cung cấp dịch vụ

Android 6.0 trở lên có khả năng dành đặc quyền để cung cấp cấu hình dành riêng cho nhà mạng cho nền tảng. Chiến dịch này chức năng, dựa trên UICC nhà cung cấp đặc quyền được giới thiệu trong Android 5.1 (Lollipop MR1), cho phép nhà cung cấp dịch vụ cấu hình đó được di chuyển ra khỏi lớp phủ cấu hình tĩnh và nhà cung cấp dịch vụ và OEM có thể cung cấp động cấu hình nhà cung cấp dịch vụ để nền tảng thông qua giao diện xác định.

Bạn có thể tải trước một ứng dụng của nhà mạng đã được ký đúng cách trong ảnh hệ thống, được cài đặt tự động hoặc thủ công thông qua cửa hàng ứng dụng. Ứng dụng được nền tảng truy vấn để cung cấp cấu hình cho các chế độ cài đặt bao gồm:

  • Mạng chuyển vùng/không chuyển vùng
  • Thư thoại kèm theo hình ảnh
  • Cài đặt mạng SMS/MMS
  • Cấu hình VoLTE/IMS

Việc xác định giá trị nào cần trả về hoàn toàn tuỳ thuộc vào ứng dụng của nhà mạng và có thể linh động dựa trên thông tin chi tiết được chuyển đến ứng dụng thông qua chủ.

Các lợi ích chính của phương pháp này là:

  • Cấu hình động – Hỗ trợ các khái niệm như cấu hình bắt nguồn không phải MCCMNC, ví dụ: nhà mạng ảo di động (MVNO) hoặc khách hàng chọn sử dụng các dịch vụ bổ sung.
  • Hỗ trợ cho các thiết bị được bán thông qua bất kỳ kênh nào - Ví dụ: điện thoại thị trường mở có thể được tự động định cấu hình bằng bằng cách tải ứng dụng xuống từ cửa hàng ứng dụng.
  • Bảo mật - Đặc quyền cung cấp cấu hình này là chỉ được cung cấp cho những ứng dụng được ký bởi nhà mạng.
  • API đã xác định – Trước đây, cấu hình này đã được lưu trữ chủ yếu bằng các lớp phủ XML nội bộ trong khung và không thông qua một lớp API. API cấu hình nhà mạng trong Android 6.0 là công khai và được xác định rõ.

Cách hoạt động

Tải cấu hình

Cấu hình mạng di động mà tính năng này cung cấp là một tập hợp các cặp khoá-giá trị thay đổi nhiều hành vi liên quan đến điện thoại trong nền tảng.

Tập hợp các giá trị của một thiết bị cụ thể được xác định bằng cách truy vấn thành phần sau đây theo thứ tự:

  1. Ứng dụng của nhà mạng (không bắt buộc, nhưng nên dùng vị trí cho cấu hình bổ sung ngoài những gì có trong Android Open Dự án nguồn (AOSP)
  2. Ứng dụng cấu hình nền tảng đi kèm với hình ảnh hệ thống
  3. Giá trị mặc định, được cố định giá trị trong mã vào khung (tương đương với hành vi trước đó lên Android 6.0)

Ứng dụng cấu hình nền tảng

Một ứng dụng cấu hình nền tảng chung đi kèm với hình ảnh hệ thống. Ứng dụng này có thể cung cấp cho bất kỳ biến nào mà ứng dụng của nhà mạng thông thường không có. Cấu hình nền tảng có thể tìm thấy ứng dụng (trong Android 6.0) trong: packages/apps/CarrierConfig

Mục đích của ứng dụng này là cung cấp một số cấu hình theo từng mạng khi một nhà mạng ứng dụng chưa được cài đặt và nhà mạng/OEM chỉ nên thực hiện thay đổi rất nhỏ đối với ứng dụng đó trong hình ảnh của chính mình. Thay vào đó, nhà mạng nên cung cấp ứng dụng riêng của nhà mạng cho phép tuỳ chỉnh nhà mạng, cho phép phân phối bản cập nhật thông qua những cách như làm cửa hàng ứng dụng.

Cách cấp đặc quyền cho một ứng dụng của nhà mạng

Ứng dụng của nhà mạng có liên quan phải được ký bằng cùng một chứng chỉ trên thẻ SIM, như được nêu trong UICC nhà cung cấp đặc quyền của nhà mạng.

Thông tin nào được chuyển đến ứng dụng của nhà mạng

Ứng dụng của nhà mạng được cung cấp các giá trị sau, cho phép ứng dụng này tạo quyết định linh động về giá trị nào cần trả về:

  • MCC
  • MNC
  • SPN
  • IMSI (số nhận dạng thuê bao di động quốc tế)
  • GID1 (Mã 1)
  • GID2 (Mã nhận dạng thiết bị di động) 2
  • Mã nhà mạng

Để biết thêm thông tin về việc tích hợp mã nhà mạng, hãy xem Tích hợp mã nhà mạng với ProviderConfig.

Khi tải cấu hình nhà mạng

Quá trình tạo danh sách các cặp khoá-giá trị sẽ diễn ra:

  • Khi SIM được tải (khởi động hoặc hoán đổi nóng SIM)
  • Khi ứng dụng của nhà mạng kích hoạt quá trình tải lại theo cách thủ công
  • Khi ứng dụng của nhà mạng được cập nhật

Hãy xem android.service.carrier.CarrierService#onLoadConfig() để biết thêm chi tiết.

Sử dụng cấu hình

Khi cấu hình được tạo, các giá trị có trong cấu hình đó sẽ được sử dụng để đặt các giá trị khác nhau của cấu hình hệ thống, bao gồm:

  • Chế độ cài đặt điện thoại khung nội bộ
  • Giá trị cấu hình được SDK trả về (ví dụ: trong SmsManager)
  • Các chế độ cài đặt ứng dụng như giá trị kết nối VVM trong Trình quay số

Khoá cấu hình

Danh sách khoá được khai báo là một phần của SDK công khai trong android.telephony.CarrierConfigManager và không thể thay đổi trong cùng một cấp độ API. Hãy xem bảng bên dưới để biết thông tin tóm tắt về các khoá.

Xây dựng ứng dụng

Tạo ứng dụng

Ứng dụng của bạn phải nhắm đến cấp độ API Android 6.0 (23).

Khai báo một lớp ghi đè android.service.Carrier.CarrierService

  1. Ghi đè onLoadConfig để trả về các giá trị bạn muốn nguồn cung cấp dựa trên đối tượng service.carrier.CarrierIdentifier đã vượt qua.
  2. Thêm logic để gọi notifyConfigChangedForSubId theo các tình huống trong đó cấu hình của nhà mạng có thể thay đổi theo thời gian (ví dụ: khi thêm các dịch vụ bổ sung vào tài khoản của họ).

Dưới đây là ví dụ:

public class SampleCarrierConfigService extends CarrierService {

    private static final String TAG = "SampleCarrierConfigService";

    public SampleCarrierConfigService() {
        Log.d(TAG, "Service created");
    }

    @Override
    public PersistableBundle onLoadConfig(CarrierIdentifier id) {
        Log.d(TAG, "Config being fetched");
        PersistableBundle config = new PersistableBundle();
        config.putBoolean(
            CarrierConfigManager.KEY_CARRIER_VOLTE_AVAILABLE_BOOL, true);
        config.putBoolean(
            CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL, false);
        config.putInt(CarrierConfigManager.KEY_VOLTE_REPLACEMENT_RAT_INT, 6);
        // Check CarrierIdentifier and add more config if needed
        return config;
    }
}

Để biết thêm chi tiết, hãy xem android.service.carrier.CarrierService tham chiếu.

Đặt tên cho lớp trong tệp kê khai

Dưới đây là ví dụ:

<service android:name=".SampleCarrierConfigService"
android:label="@string/service_name"
android:permission="android.permission.BIND_CARRIER_SERVICES">
      <intent-filter>
      <action android:name="android.service.carrier.CarrierService"/></intent-filter>
</service>

Ký ứng dụng bằng chính sách này chứng chỉ trên SIM

Hãy xem phần UICC nhà cung cấp đặc quyền để biết các yêu cầu liên quan.

Thêm APN bằng ứng dụng của nhà mạng

Cách thêm APN theo phương thức lập trình qua ứng dụng của nhà mạng (ví dụ: trong khi SIM) kích hoạt), hãy sử dụng API ContentResolver để thêm các mục APN vào trình cung cấp nội dung được xác định theo URI android.provider.Telephony.Carriers.CONTENT_URI. Để biết thêm thông tin về cấu trúc bảng cho URI nội dung, hãy xem Telephony.Carriers.

Để biết thêm thông tin, hãy xem APN và ProviderConfig.

Kiểm tra ứng dụng

Khi đã tạo ứng dụng cấu hình, bạn có thể kiểm thử mã bằng:

  • SIM có chứa một chữ ký chứng chỉ hợp lệ
  • Một thiết bị chạy Android 6.0 trở lên, ví dụ như thiết bị Android