Konfigurasi Operator

Android 6.0 dan lebih tinggi menyertakan kemampuan 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 secara dinamis menyediakan konfigurasi operator ke platform melalui antarmuka yang ditentukan.

Aplikasi operator yang ditandatangani dengan benar dapat dimuat sebelumnya di image sistem, diinstal secara otomatis, atau diinstal secara manual melalui app store. Aplikasi ini diminta oleh platform untuk menyediakan konfigurasi pengaturan termasuk:

  • Jaringan roaming/non-roaming
  • Pesan suara visual
  • Pengaturan jaringan SMS/MMS
  • Konfigurasi VoLTE/IMS

Penentuan nilai apa yang akan dikembalikan sepenuhnya bergantung pada aplikasi operator dan dapat bersifat dinamis berdasarkan informasi mendetail yang diteruskan ke aplikasi melalui platform.

Manfaat utama dari pendekatan ini adalah:

  • Konfigurasi dinamis - Dukungan untuk konsep seperti konfigurasi turunan non-MCCMNC, misalnya, operator jaringan virtual seluler (MVNO) atau pelanggan yang ikut serta dalam layanan tambahan.
  • Dukungan untuk perangkat yang dijual melalui saluran apa pun - Misalnya, telepon pasar terbuka dapat dikonfigurasi secara otomatis dengan pengaturan yang tepat dengan mengunduh aplikasi dari toko aplikasi.
  • Keamanan - Hak istimewa untuk menyediakan konfigurasi ini hanya diberikan kepada aplikasi yang ditandatangani oleh operator.
  • Defined API - Sebelumnya konfigurasi ini sebagian besar disimpan dalam overlay XML internal dalam kerangka kerja dan bukan melalui API publik. API konfigurasi operator di Android 6.0 bersifat publik dan terdefinisi dengan baik.

Bagaimana itu bekerja

Memuat konfigurasi

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

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

  1. Aplikasi operator (ini opsional, namun merupakan lokasi yang direkomendasikan untuk konfigurasi tambahan di luar yang ada di Proyek Sumber Terbuka Android (AOSP))
  2. Aplikasi konfigurasi platform yang dibundel dengan image sistem
  3. 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 memberikan nilai untuk variabel apa pun yang tidak diberikan oleh aplikasi operator biasa. Aplikasi konfigurasi platform dapat ditemukan (di Android 6.0) di: packages/apps/CarrierConfig

Tujuan aplikasi ini adalah untuk menyediakan beberapa konfigurasi per jaringan ketika aplikasi operator tidak diinstal, dan operator/OEM hanya boleh melakukan sedikit perubahan pada gambar mereka sendiri. Sebaliknya, operator harus menyediakan aplikasi operator terpisah untuk penyesuaian operator, sehingga pembaruan dapat didistribusikan melalui jalur seperti toko aplikasi.

Bagaimana hak istimewa diberikan kepada aplikasi operator

Aplikasi operator yang dimaksud harus ditandatangani dengan sertifikat yang sama dengan yang terdapat pada kartu SIM, seperti yang didokumentasikan dalam Hak Istimewa Operator UICC .

Informasi apa yang diteruskan ke aplikasi operator

Aplikasi operator dilengkapi dengan nilai-nilai berikut, yang memungkinkannya membuat keputusan dinamis mengenai nilai apa yang akan dikembalikan:

  • PKS
  • perusahaan multinasional
  • SPN
  • IMSI
  • GID1
  • GID2
  • ID Operator

Untuk informasi lebih lanjut tentang pengintegrasian ID operator, lihat Mengintegrasikan ID operator dengan CarrierConfig .

Saat memuat konfigurasi operator terjadi

Pembuatan daftar pasangan nilai kunci terjadi:

  • Saat SIM dimuat (boot, 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

Ketika konfigurasi dibangun, nilai-nilai yang terkandung di dalamnya digunakan untuk mengatur berbagai nilai konfigurasi sistem, termasuk:

  • Pengaturan telepon kerangka internal
  • Nilai konfigurasi yang dikembalikan SDK, misalnya, di SmsManager
  • Pengaturan aplikasi seperti nilai koneksi VVM di Dialer

Kunci konfigurasi

Daftar kunci didefinisikan sebagai bagian dari SDK publik di android.telephony.CarrierConfigManager dan tidak dapat diubah dalam level API yang sama. Lihat tabel di bawah untuk ringkasan kunci.

Membangun aplikasi

Membuat aplikasi

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

Mendeklarasikan kelas yang menggantikan Android.service.carrier.CarrierService

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

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

Memberi nama kelas di 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 mengetahui persyaratannya.

Menambahkan APN dengan aplikasi operator

Untuk menambahkan APN secara terprogram dari aplikasi operator (misalnya, selama aktivasi SIM), gunakan API ContentResolver untuk menambahkan item APN ke penyedia konten yang diidentifikasi oleh URI android.provider.Telephony.Carriers.CONTENT_URI . Untuk informasi selengkapnya tentang struktur tabel untuk URI konten, lihat Telephony.Carriers .

Untuk informasi selengkapnya, lihat APN dan CarrierConfig .

Menguji aplikasi

Saat Anda telah membuat aplikasi konfigurasi, Anda dapat menguji kode Anda dengan:

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