Android 6.0 dan yang lebih tinggi menyertakan kemampuan bagi aplikasi dengan hak istimewa untuk menyediakan konfigurasi khusus operator ke platform. Fungsi ini, berdasarkan Hak Istimewa Operator UICC yang diperkenalkan di Android 5.1 (Lollipop MR1), memungkinkan konfigurasi operator dipindahkan dari overlay konfigurasi statis dan memberi operator dan OEM kemampuan untuk menyediakan konfigurasi operator secara dinamis ke platform melalui antarmuka yang ditentukan.
Aplikasi operator yang ditandatangani dengan benar dapat dipramuat dalam image sistem, diinstal secara otomatis, atau diinstal secara manual melalui app store. Aplikasi dikueri oleh platform untuk memberikan konfigurasi setelan termasuk:
- Jaringan roaming/non-roaming
- Pesan suara visual
- Setelan jaringan SMS/MMS
- Konfigurasi VoLTE/IMS
Penentuan nilai yang akan ditampilkan sepenuhnya bergantung pada aplikasi operator dan dapat bersifat dinamis berdasarkan informasi mendetail yang diteruskan ke aplikasi melalui platform.
Manfaat utama pendekatan ini adalah:
- Konfigurasi dinamis - Dukungan untuk konsep seperti konfigurasi turunan non-MCCMNC, misalnya, operator jaringan virtual seluler (MVNO) atau keikutsertaan pelanggan dalam layanan tambahan.
- Dukungan untuk perangkat yang dijual melalui saluran mana pun - Misalnya, ponsel pasar terbuka dapat otomatis dikonfigurasi dengan setelan yang tepat dengan mendownload aplikasi dari app store.
- Keamanan - Hak istimewa untuk menyediakan konfigurasi ini hanya diberikan kepada aplikasi yang ditandatangani oleh operator.
- API yang Ditetapkan - Sebelumnya, konfigurasi ini sebagian besar disimpan dalam overlay XML internal dalam framework, bukan melalui API publik. API konfigurasi operator di Android 6.0 bersifat publik dan telah didefinisikan dengan baik.
Cara kerjanya
Memuat konfigurasi
Konfigurasi operator yang disediakan oleh fitur ini adalah sekumpulan key-value pair yang mengubah berbagai perilaku terkait telepon di platform.
Kumpulan nilai untuk perangkat tertentu ditentukan dengan mengkueri komponen berikut secara berurutan:
- Aplikasi operator (opsional, tetapi merupakan lokasi yang direkomendasikan untuk konfigurasi tambahan di luar yang ada di Android Open Source Project (AOSP))
- Aplikasi konfigurasi platform yang dipaketkan dengan image sistem
- Nilai default, di-hardcode ke dalam framework (setara dengan perilaku sebelum Android 6.0)
Aplikasi konfigurasi platform
Aplikasi konfigurasi platform generik dipaketkan dengan image sistem. Aplikasi ini dapat menyediakan
nilai untuk variabel apa pun yang tidak dapat dilakukan oleh aplikasi operator reguler. Aplikasi konfigurasi platform
dapat ditemukan (di Android 6.0) di: packages/apps/CarrierConfig
Tujuan aplikasi ini adalah menyediakan beberapa konfigurasi per jaringan saat aplikasi operator tidak diinstal, dan operator/OEM sebaiknya hanya melakukan sedikit perubahan pada aplikasi operator tersebut pada image-nya sendiri. Sebagai gantinya, operator harus menyediakan aplikasi operator terpisah untuk penyesuaian operator, sehingga update dapat didistribusikan melalui saluran seperti app store.
Cara hak istimewa diberikan ke aplikasi operator
Aplikasi operator yang dimaksud harus ditandatangani dengan sertifikat yang sama dengan yang ada pada kartu SIM, seperti yang didokumentasikan dalam Hak Istimewa Operator UICC.
Informasi yang diteruskan ke aplikasi operator
Aplikasi operator dilengkapi dengan nilai berikut, sehingga dapat membuat keputusan dinamis terkait nilai yang akan ditampilkan:
- MCC
- MNC
- SPN
- IMSI
- GID1
- GID2
- ID Operator
Untuk informasi selengkapnya tentang mengintegrasikan ID operator, lihat Mengintegrasikan ID operator dengan CarrierConfig.
Saat memuat konfigurasi operator
Pembuatan daftar pasangan nilai kunci terjadi:
- Saat SIM dimuat (booting, atau hot swap SIM)
- Saat aplikasi operator memicu pemuatan ulang secara manual
- Saat aplikasi operator diperbarui
Lihat referensi
android.service.carrier.CarrierService#onLoadConfig()
untuk detail selengkapnya.
Menggunakan konfigurasi
Saat konfigurasi di-build, nilai yang ada di dalamnya digunakan untuk menetapkan berbagai nilai konfigurasi sistem, termasuk:
- Setelan telepon framework internal
- Nilai konfigurasi yang ditampilkan SDK, misalnya, di SmsManager
- Setelan aplikasi seperti nilai koneksi VVM di Telepon
Kunci konfigurasi
Daftar kunci ditentukan sebagai bagian dari SDK publik di android.telephony.CarrierConfigManager
dan tidak dapat berubah dalam level API yang sama. Lihat tabel di bawah untuk ringkasan kunci.
Membangun aplikasi
Membuat aplikasi
Aplikasi Anda harus menargetkan level API Android 6.0 (23).
Mendeklarasikan class yang mengganti android.service.carrier.CarrierService
- Ganti
onLoadConfig
untuk menampilkan nilai yang ingin Anda pasokkan berdasarkan objekservice.carrier.CarrierIdentifier
yang diteruskan. - Tambahkan logika untuk memanggil
notifyConfigChangedForSubId
dalam skenario di mana konfigurasi operator dapat berubah dari waktu ke waktu (misalnya, saat pengguna menambahkan layanan ekstra ke akun mereka).
Contohnya adalah di bawah ini:
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; } }
Untuk detail selengkapnya, lihat
referensi
android.service.carrier.CarrierService
.
Beri nama class dalam manifes
Contohnya di bawah ini:
<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>
Menandatangani aplikasi dengan sertifikat yang sama di SIM
Lihat Hak Istimewa Operator UICC untuk persyaratannya.
Menambahkan APN dengan aplikasi operator
Untuk menambahkan APN secara terprogram dari aplikasi operator (misalnya, selama aktivasi
SIM), gunakan
ContentResolver
API untuk menambahkan item APN ke penyedia konten
yang diidentifikasi oleh URI
android.provider.Telephony.Carriers.CONTENT_URI
.
Untuk mengetahui informasi selengkapnya tentang struktur tabel URI konten, lihat
Telephony.Carriers
.
Untuk mengetahui informasi selengkapnya, lihat APN dan CarrierConfig.
Menguji aplikasi
Setelah membangun aplikasi konfigurasi, Anda dapat menguji kode dengan:
- SIM berisi tanda tangan sertifikat yang valid
- Perangkat yang menjalankan Android 6.0 dan yang lebih baru, misalnya perangkat Android
Menetapkan kemampuan layanan ekspedisi
Di Android, kemampuan layanan operator menjelaskan apakah layanan suara, pesan, dan data didukung di perangkat. Operator dapat menentukan kemampuan layanan operator untuk perangkat di tingkat perangkat dan di tingkat langganan (Android 15 atau yang lebih tinggi).
Kemampuan layanan tingkat perangkat
Kemampuan layanan tingkat perangkat dikonfigurasi saat perangkat diproduksi (tidak dapat diubah setelah manufaktur). Operator dapat menentukan kemampuan tingkat perangkat melalui penggantian resource sistem berikut:
Aplikasi dapat mengkueri kemampuan layanan tingkat perangkat melalui API berikut:
Kemampuan layanan tingkat langganan
Untuk perangkat yang menjalankan Android 15 atau yang lebih baru, operator dapat menentukan
kemampuan layanan perangkat di tingkat langganan. Untuk menentukan kemampuan layanan tingkat
langganan, gunakan
CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY
API. Misalnya, untuk menentukan bahwa langganan hanya berupa data, setel nilai ke
SubscriptionManager#SERVICE_CAPABILITY_DATA
.
Aplikasi (aplikasi sistem bawaan dan aplikasi pihak ketiga) dapat mengkueri kemampuan layanan
operator untuk langganan tertentu melalui
metode
SubscriptionInfo.getServiceCapabilities()
. Hal ini memungkinkan developer aplikasi menyesuaikan pengalaman pengguna aplikasi berdasarkan
kemampuan yang tersedia untuk langganan. Misalnya, developer aplikasi dapat
memastikan bahwa aplikasi telepon tidak mengizinkan panggilan jika pengguna menggunakan
langganan khusus data.
API kemampuan layanan yang tidak digunakan lagi
Mulai Android 15, Android memberikan kemampuan layanan tingkat perangkat dan tingkat langganan. Karena perubahan ini, API kemampuan level perangkat yang ada diganti namanya agar lebih mudah dibaca. Tabel berikut mencantumkan API yang tidak digunakan lagi dan API yang diganti namanya yang diperkenalkan di Android 15:
Tidak digunakan lagi (Android 14 atau yang lebih lama) | Setara (Android 15 atau yang lebih baru) |
---|---|
TelephonyManager.isVoiceCapable() |
TelephonyManager.isDeviceVoiceCapable() |
TelephonyManager.isSmsCapable() |
TelephonyManager.isDeviceSmsCapable() |