Android 6.0 trở lên có khả năng cung cấp cấu hình dành riêng cho nhà mạng cho nền tảng cho các ứng dụng đặc quyền. Chức năng này, dựa trên Quyền đặc biệt của nhà mạng UICC được giới thiệu trong Android 5.1 (Lollipop MR1), cho phép di chuyển cấu hình nhà mạng ra khỏi lớp phủ cấu hình tĩnh và cho phép nhà mạng cũng như OEM linh động cung cấp cấu hình nhà mạng cho nền tảng thông qua một giao diện đã xác định.
Ứng dụng của nhà mạng được ký đúng cách có thể được tải trước trong hình ảnh hệ thống, cài đặt tự động hoặc cài đặt theo cách thủ công thông qua cửa hàng ứng dụng. Nền tảng truy vấn ứng dụng để 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ị cần trả về hoàn toàn phụ 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 nền tảng.
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 từ 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ợ các thiết bị được bán qua bất kỳ kênh nào – Ví dụ: điện thoại trên thị trường mở có thể được tự động định cấu hình bằng chế độ cài đặt phù hợp bằng cách tải ứng dụng xuống từ cửa hàng ứng dụng.
- Bảo mật – Quyền cung cấp cấu hình này chỉ được cấp cho các ứng dụng do nhà mạng ký.
- API đã xác định – Trước đây, cấu hình này chủ yếu được lưu trữ trong các lớp phủ XML nội bộ trong khung và không thông qua API công khai. API cấu hình nhà mạng trong Android 6.0 là công khai và được xác định rõ ràng.
Cách hoạt động
Tải cấu hình
Cấu hình nhà mạng do 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 giá trị cho một thiết bị cụ thể được xác định bằng cách truy vấn các thành phần sau theo thứ tự:
- Ứng dụng của nhà mạng (không bắt buộc, nhưng đây là vị trí được đề xuất để định cấu hình bổ sung ngoài những gì có trong Dự án nguồn mở Android (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 mã hoá cứng vào khung (tương đương với hành vi trước 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 được đóng gói cùng với hình ảnh hệ thống. Ứng dụng này có thể cung cấp giá trị cho mọi biến mà ứng dụng của nhà mạng thông thường không cung cấp. Bạn có thể tìm thấy ứng dụng cấu hình nền tả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 cho mỗi mạng khi ứng dụng của nhà mạng không được cài đặt và nhà mạng/OEM chỉ nên thực hiện những thay đổi tối thiểu đối với ứng dụng này trong hình ảnh của riêng họ. Thay vào đó, nhà mạng nên cung cấp ứng dụng riêng của nhà mạng để tuỳ chỉnh nhà mạng, cho phép phân phối bản cập nhật thông qua các kênh như cửa hàng ứng dụng.
Cách cấp đặc quyền cho ứ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 chính chứng chỉ có trên thẻ SIM, như được ghi nhận trong phần Quyền đặc biệt của nhà mạng UICC.
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 đưa ra quyết định linh động về giá trị cần trả về:
- MCC
- MNC
- SPN
- IMSI (số nhận dạng thuê bao di động quốc tế)
- GID1
- GID2
- Mã nhà mạng
Để biết thêm thông tin về cách tích hợp mã nhận dạng nhà mạng, hãy xem phần Tích hợp mã nhận dạng nhà mạng bằng CarrierConfig.
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ị diễn ra:
- Khi SIM được tải (khởi động hoặc hoán đổi SIM nóng)
- 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 tài liệu tham khảo
android.service.carrier.CarrierService#onLoadConfig()
để biết thêm thông tin 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 dùng để đặt nhiều giá trị cấu hình hệ thống, bao gồm:
- Cài đặt điện thoại trong khung nội bộ
- Giá trị cấu hình do SDK trả về, ví dụ: trong SmsManager
- 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 xác định 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á.
Tạo ứng dụng
Tạo ứng dụng
Ứng dụng của bạn phải nhắm đến API cấp 23 của Android 6.0.
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 cung cấp dựa trên đối tượngservice.carrier.CarrierIdentifier
được truyền. - Thêm logic để gọi
notifyConfigChangedForSubId
trong các trường hợp cấu hình của nhà mạng có thể thay đổi theo thời gian (ví dụ: khi người dùng thêm các dịch vụ bổ sung vào tài khoản của họ).
Sau đâ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 thông tin chi tiết, hãy xem tài liệu tham khảo về android.service.carrier.CarrierService
.
Đặt tên cho lớp trong tệp kê khai
Sau đâ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 chứng chỉ trên SIM
Hãy xem phần Quyền đặc biệt của nhà mạng đối với UICC để biết các yêu cầu.
Thêm APN bằng ứng dụng của nhà mạng
Để thêm APN theo phương thức lập trình từ ứng dụng của nhà mạng (ví dụ: trong quá trình kích hoạt SIM), hãy sử dụng
API ContentResolver
để thêm các mục APN vào một trình cung cấp nội dung được xác định bằng 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 phần APN và CarrierConfig.
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:
- Thẻ SIM chứa chữ ký chứng chỉ hợp lệ
- Thiết bị chạy Android 6.0 trở lên, ví dụ: thiết bị Android
Thiết lập chức năng dịch vụ của nhà mạng
Trong Android, các tính năng dịch vụ của nhà mạng mô tả liệu dịch vụ thoại, nhắn tin và dữ liệu có được hỗ trợ trên thiết bị hay không. Nhà mạng có thể chỉ định các tính năng dịch vụ của nhà mạng cho một thiết bị ở cấp thiết bị và ở cấp gói thuê bao (Android 15 trở lên).
Các tính năng dịch vụ cấp thiết bị
Các tính năng dịch vụ cấp thiết bị được định cấu hình khi thiết bị được sản xuất (không thể thay đổi sau khi sản xuất). Nhà mạng có thể chỉ định các tính năng cấp thiết bị thông qua các cơ chế ghi đè tài nguyên hệ thống sau:
Ứng dụng có thể truy vấn các tính năng dịch vụ cấp thiết bị thông qua các API sau:
Các tính năng 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 các tính năng dịch vụ của thiết bị ở cấp gói thuê bao. Để chỉ định các tính năng dịch vụ cấp gói thuê bao, hãy sử dụng API
CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY
. Ví dụ: để chỉ định rằng một gói thuê bao chỉ có 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 các tính năng dịch vụ của nhà mạng cho một gói thuê bao cụ thể thông qua phương thức
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 có sẵn 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 quay số 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ỉ có dữ liệu.
API không dùng nữa về chức năng dịch vụ
Kể từ Android 15, Android cung cấp cả chức năng dịch vụ cấp thiết bị và cấp gói thuê bao. Do thay đổi này, các API chức năng cấp thiết bị hiện có đã đượ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à các API được đổi tên được giới thiệu 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() |