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ự:
- Ứ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)
- Ứng dụng cấu hình nền tảng đi kèm với hình ảnh hệ thống
- 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
- Ghi đè
onLoadConfig
để trả về các giá trị mà bạn muốn nguồn cung cấp dựa trên đối tượngservice.carrier.CarrierIdentifier
đã vượt qua. - 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
Đặt khả năng của dịch vụ của nhà mạng
Trong Android, tính năng dịch vụ của nhà cung cấp dịch vụ cho biết liệu giọng nói, tin nhắn, và các dịch vụ dữ liệu được hỗ trợ trên một thiết bị. Nhà mạng có thể chỉ định hãng vận chuyển khả năng cung cấp dịch vụ của một thiết bị ở cấp thiết bị và ở cấp gói thuê bao cấp (Android 15 trở lên).
Khả năng của dịch vụ cấp thiết bị
Khả năng của dịch vụ cấp thiết bị được định cấu hình khi một thiết bị đã được sản xuất (bạn không thể thay đổi thiết bị đó sau khi sản xuất). Nhà mạng có thể chỉ định các khả năng ở cấp thiết bị thông qua tài nguyên hệ thống sau đây ghi đè:
Ứng dụng có thể truy vấn chức năng của dịch vụ ở cấp thiết bị thông qua những cách sau API:
Chức năng của dịch vụ ở cấp gói thuê bao
Đối với các thiết bị chạy Android 15 trở lên, nhà mạng có thể chỉ định
khả năng cung cấp dịch vụ của thiết bị ở cấp thuê bao. Để chỉ định dịch vụ cấp thuê bao
hãy sử dụng tính năng
CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY
API. Ví dụ: để chỉ định rằng gói thuê bao chỉ là dữ liệu, hãy đặt giá trị thành
SubscriptionManager#SERVICE_CAPABILITY_DATA
.
Các ứng dụng (ứng dụng hệ thống được tải trước và ứng dụng bên thứ ba) có thể truy vấn nhà mạng
khả năng cung cấp dịch vụ của một gói thuê bao cụ thể thông qua
SubscriptionInfo.getServiceCapabilities()
. Điều này cho phép nhà phát triển ứng dụng tuỳ chỉnh trải nghiệm người dùng của ứng dụng dựa trên
các tính năng hiện có cho gói thuê bao đó. Ví dụ: nhà phát triển ứng dụng có thể
đảm bảo rằng ứng dụng gọi điện không cho phép thực hiện cuộc gọi nếu người dùng đang sử dụng
gói thuê bao chỉ dữ liệu.
Các API chức năng của dịch vụ không dùng nữa
Kể từ Android 15, Android sẽ cung cấp cả cấp thiết bị và cấp độ năng lực cung cấp dịch vụ cấp gói thuê bao. Do thay đổi này, cấp thiết bị hiện tại năng lực API đã được đổi tên để dễ đọc hơn. Bảng sau đây liệt kê các API không dùng nữa và API đã đổi tên ra mắt trong Android 15:
Không dùng nữa (Android 14 trở xuống) | Tương đương (Android 15 trở lên) |
---|---|
TelephonyManager.isVoiceCapable() |
TelephonyManager.isDeviceVoiceCapable() |
TelephonyManager.isSmsCapable() |
TelephonyManager.isDeviceSmsCapable() |