Konfigurasi operator

Android 6.0 dan yang lebih tinggi menyertakan kemampuan bagi aplikasi dengan hak istimewa untuk memberikan 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 serta OEM kemampuan untuk menyediakan konfigurasi operator secara dinamis ke platform melalui antarmuka yang ditentukan.

Aplikasi operator yang ditandatangani dengan benar dapat dimuat sebelumnya 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 yang tidak berasal dari MCCMNC, misalnya, operator jaringan virtual seluler (MVNO) atau pelanggan yang memilih untuk menggunakan layanan tambahan.
  • Dukungan untuk perangkat yang dijual melalui saluran apa pun - Misalnya, ponsel pasar terbuka dapat dikonfigurasi secara otomatis 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 ditentukan - Sebelumnya, konfigurasi ini disimpan sebagian besar di overlay XML internal dalam framework dan bukan melalui API publik. Carrier config API di Android 6.0 bersifat publik dan terdefinisi dengan baik.

Cara kerjanya

Muat konfigurasi

Konfigurasi operator yang disediakan oleh fitur ini adalah serangkaian pasangan nilai kunci yang mengubah berbagai perilaku terkait teleponi di platform.

Kumpulan nilai untuk perangkat tertentu ditentukan dengan membuat kueri komponen berikut secara berurutan:

  1. Aplikasi operator (opsional, tetapi merupakan lokasi yang direkomendasikan untuk konfigurasi tambahan di luar yang ada di Project Open Source Android (AOSP))
  2. Aplikasi konfigurasi platform yang dipaketkan dengan image sistem
  3. Nilai default, yang di-hardcode ke dalam framework (setara dengan perilaku sebelum Android 6.0)

Aplikasi konfigurasi platform

Aplikasi konfigurasi platform generik dibundel dengan image sistem. Aplikasi ini dapat memberikan nilai untuk variabel apa pun yang tidak ada di aplikasi operator reguler. Aplikasi konfigurasi platform dapat ditemukan (di Android 6.0) di: packages/apps/CarrierConfig

Tujuan aplikasi ini adalah untuk menyediakan beberapa konfigurasi per jaringan saat aplikasi operator tidak diinstal, dan operator/OEM hanya boleh melakukan perubahan minimal pada aplikasi ini di image mereka sendiri. Sebagai gantinya, operator harus menyediakan aplikasi operator terpisah untuk penyesuaian operator, sehingga memungkinkan update didistribusikan melalui jalur seperti app store.

Cara memberikan hak istimewa ke aplikasi operator

Aplikasi operator yang dimaksud harus ditandatangani dengan sertifikat yang sama yang ditemukan di kartu SIM, seperti yang didokumentasikan dalam UICC Carrier Privileges.

Informasi apa yang diteruskan ke aplikasi operator

Aplikasi operator dilengkapi dengan nilai berikut, sehingga dapat membuat keputusan dinamis mengenai nilai yang akan ditampilkan:

  • MCC
  • MNC
  • SPN
  • IMSI
  • GID1
  • GID2
  • ID Operator

Untuk mengetahui informasi selengkapnya tentang cara mengintegrasikan ID operator, lihat Mengintegrasikan ID operator dengan CarrierConfig.

Saat memuat konfigurasi operator terjadi

Penyusunan daftar key-value pair terjadi:

  • Saat SIM dimuat (boot, atau penggantian SIM saat perangkat aktif)
  • Saat aplikasi operator memicu pemuatan ulang secara manual
  • Saat aplikasi operator diperbarui

Lihat referensi android.service.carrier.CarrierService#onLoadConfig() untuk mengetahui detail selengkapnya.

Menggunakan konfigurasi

Saat konfigurasi dibuat, nilai yang ada di dalamnya digunakan untuk menetapkan berbagai nilai konfigurasi sistem, termasuk:

  • Setelan teleponi framework internal
  • Nilai konfigurasi yang ditampilkan SDK, misalnya, di SmsManager
  • Setelan aplikasi seperti nilai koneksi VVM di Aplikasi 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 mengetahui ringkasan kunci.

Membangun aplikasi

Membuat aplikasi

Aplikasi Anda harus menargetkan level API Android 6.0 (23).

Deklarasikan class yang menggantikan android.service.carrier.CarrierService

  1. Ganti onLoadConfig untuk menampilkan nilai yang ingin Anda berikan berdasarkan objek service.carrier.CarrierIdentifier yang diteruskan.
  2. Tambahkan logika untuk memanggil notifyConfigChangedForSubId dalam skenario saat konfigurasi operator dapat berubah seiring waktu (misalnya, saat pengguna menambahkan layanan tambahan ke akunnya).

Berikut contohnya:

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

Berikut contohnya:

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

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 untuk URI konten, lihat Telephony.Carriers.

Untuk mengetahui informasi selengkapnya, lihat APN dan CarrierConfig.

Menguji aplikasi

Setelah membuat aplikasi konfigurasi, Anda dapat menguji kode dengan:

  • SIM yang berisi tanda tangan sertifikat yang valid
  • Perangkat yang menjalankan Android 6.0 dan yang lebih baru, misalnya perangkat Android

Menetapkan kemampuan layanan operator

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 diproduksi). 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 tinggi, operator dapat menentukan kemampuan layanan perangkat di tingkat langganan. Untuk menentukan kemampuan layanan tingkat langganan, gunakan API CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY. Misalnya, untuk menentukan bahwa langganan hanya berupa data, tetapkan 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 dialer tidak mengizinkan pembuatan panggilan jika pengguna menggunakan langganan khusus data.

API kemampuan layanan yang tidak digunakan lagi

Mulai Android 15, Android menyediakan kemampuan layanan tingkat perangkat dan tingkat langganan. Karena perubahan ini, API kemampuan tingkat 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 rendah) Setara (Android 15 atau yang lebih tinggi)
TelephonyManager.isVoiceCapable() TelephonyManager.isDeviceVoiceCapable()
TelephonyManager.isSmsCapable() TelephonyManager.isDeviceSmsCapable()