Android 6.0 ve sonraki sürümlerde, ayrıcalıklı uygulamaların platforma operatöre özel yapılandırma sağlamasına olanak tanıyan bir özellik bulunur. Android 5.1'de (Lollipop MR1) kullanıma sunulan UICC operatör ayrıcalıklarına dayalı bu işlev, operatör yapılandırmasının statik yapılandırma katmanlarından uzaklaştırılmasına olanak tanır. Ayrıca, operatörlere ve OEM'lere tanımlı bir arayüz aracılığıyla platforma dinamik olarak operatör yapılandırması sağlama imkanı verir.
Düzgün şekilde imzalanmış bir operatör uygulaması, sistem görüntüsüne önceden yüklenebilir, otomatik olarak yüklenebilir veya uygulama mağazası üzerinden manuel olarak yüklenebilir. Uygulama, aşağıdaki ayarların yapılandırmasını sağlamak için platform tarafından sorgulanır:
- Dolaşım/dolaşım dışı ağlar
- Görsel sesli mesaj
- SMS/MMS ağ ayarları
- VoLTE/IMS yapılandırmaları
Hangi değerlerin döndürüleceğine karar verme işlemi tamamen operatör uygulamasına bağlıdır ve platform üzerinden uygulamaya iletilen ayrıntılı bilgilere göre dinamik olabilir.
Bu yaklaşımın temel avantajları şunlardır:
- Dinamik yapılandırma: MCCMNC'den türetilmeyen yapılandırma gibi kavramlar desteklenir. Örneğin, mobil sanal ağ operatörleri (MVNO'lar) veya müşterilerin ek hizmetleri etkinleştirmesi.
- Herhangi bir kanal üzerinden satılan cihazlar için destek: Örneğin, açık pazarda satılan bir telefon, uygulama mağazasından bir uygulama indirilerek doğru ayarlarla otomatik olarak yapılandırılabilir.
- Güvenlik: Bu yapılandırmayı sağlama ayrıcalığı yalnızca operatör tarafından imzalanan uygulamalara verilir.
- Tanımlanmış API: Bu yapılandırma daha önce çoğunlukla çerçeve içindeki dahili XML katmanlarında depolanıyordu ve herkese açık bir API üzerinden depolanmıyordu. Android 6.0'daki operatör yapılandırma API'si herkese açıktır ve iyi tanımlanmıştır.
İşleyiş şekli
Yapılandırmayı yükleme
Bu özellik tarafından sağlanan operatör yapılandırması, platformdaki çeşitli telefon görüşmesiyle ilgili davranışları değiştiren bir anahtar/değer çiftleri kümesidir.
Belirli bir cihaza ait değerler kümesi, aşağıdaki bileşenlere sırayla sorgu gönderilerek belirlenir:
- Operatör uygulaması (Bu isteğe bağlıdır ancak Android Açık Kaynak Projesi'nde (AOSP) bulunanların dışında ek yapılandırma için önerilen konumdur.)
- Sistem görüntüsüyle birlikte gelen platform yapılandırma uygulaması
- Çerçeveye sabit kodlanmış varsayılan değerler (Android 6.0'dan önceki davranışa eşdeğer)
Platform yapılandırma uygulaması
Sistem görüntüsünde genel bir platform yapılandırma uygulaması bulunur. Bu uygulama, normal operatör uygulamasının sağlayamadığı değişkenler için değerler sağlayabilir. Platform yapılandırma
uygulaması (Android 6.0'da) şu konumda bulunur: packages/apps/CarrierConfig
Bu uygulamanın amacı, operatör uygulaması yüklü olmadığında ağ başına yapılandırma sağlamaktır. Operatörler/OEM'ler, kendi görüntülerinde bu uygulamada yalnızca minimum düzeyde değişiklik yapmalıdır. Bunun yerine operatörler, operatör özelleştirmesi için ayrı bir operatör uygulaması sağlamalı ve güncellemelerin uygulama mağazaları gibi kanallar aracılığıyla dağıtılmasına izin vermelidir.
Operatör uygulamasına ayrıcalık verme
Söz konusu operatör uygulaması, UICC Operatör Ayrıcalıkları'nda belirtildiği gibi SIM kartta bulunan sertifikayla imzalanmalıdır.
Operatör uygulamasına hangi bilgiler aktarılır?
Operatör uygulamasına aşağıdaki değerler sağlanır. Bu değerler, döndürülecek değerler konusunda dinamik bir karar vermesini sağlar:
- MCC
- MNC
- SPN
- IMSI
- GID1
- GID2
- Operatör Kimliği
Kargo şirketi kimliklerini entegre etme hakkında daha fazla bilgi için bkz. Kargo şirketi kimliklerini CarrierConfig ile entegre etme.
Operatör yapılandırması yüklenirken
Anahtar/değer çiftleri listesi oluşturulurken:
- SIM yüklendiğinde (önyükleme veya SIM'i sıcak değiştirme)
- Operatör uygulaması, yeniden yüklemeyi manuel olarak tetiklediğinde
- Operatör uygulaması güncellendiğinde
Daha fazla bilgi için
android.service.carrier.CarrierService#onLoadConfig()
referansına bakın.
Yapılandırmayı kullanma
Yapılandırma oluşturulduğunda, sistem yapılandırmasının çeşitli değerlerini ayarlamak için yapılandırmada yer alan değerler kullanılır. Bu değerler şunlardır:
- Dahili çerçeve telefon ayarları
- SDK tarafından döndürülen yapılandırma değerleri (ör. SmsManager'da)
- Çevirici'deki görsel sesli mesaj bağlantı değerleri gibi uygulama ayarları
Yapılandırma anahtarları
Anahtar listesi, android.telephony.CarrierConfigManager
içindeki genel SDK'nın bir parçası olarak tanımlanır
ve aynı API düzeyinde değiştirilemez. Tuşların özetini aşağıdaki tabloda görebilirsiniz.
Uygulamayı oluşturma
Uygulamayı oluşturma
Uygulamanız, Android 6.0 API düzeyini (23) hedeflemelidir.
android.service.carrier.CarrierService'i geçersiz kılan bir sınıf bildirin.
onLoadConfig
değerini geçersiz kılarakservice.carrier.CarrierIdentifier
nesnesine göre sağlamak istediğiniz değerleri döndürün.- Operatör yapılandırmasının zaman içinde değişebileceği senaryolarda (ör. kullanıcı hesabına ek hizmetler eklediğinde)
notifyConfigChangedForSubId
işlevini çağırmak için mantık ekleyin.
Aşağıda bir örnek verilmiştir:
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; } }
Daha fazla bilgi için android.service.carrier.CarrierService
referansına bakın.
Bildiride sınıfı adlandırma
Aşağıda bir örnek verilmiştir:
<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>
Uygulamayı SIM'deki aynı sertifikayla imzalayın.
Koşullar için UICC Operatör Ayrıcalıkları başlıklı makaleyi inceleyin.
Operatör uygulamasıyla APN ekleme
Bir operatör uygulamasından (ör. SIM etkinleştirme sırasında) APN'leri programatik olarak eklemek için
ContentResolver
API'lerini kullanarak URI ile tanımlanan bir içerik sağlayıcıya APN öğeleri ekleyin
android.provider.Telephony.Carriers.CONTENT_URI
.
İçerik URI'sinin tablo yapısı hakkında daha fazla bilgi için
Telephony.Carriers
bölümüne bakın.
Daha fazla bilgi için APN ve CarrierConfig başlıklı makaleyi inceleyin.
Uygulamayı test et
Yapılandırma uygulamanızı oluşturduktan sonra kodunuzu aşağıdakilerle test edebilirsiniz:
- Geçerli bir sertifika imzası içeren SIM
- Android 6.0 ve sonraki sürümleri çalıştıran bir cihaz (ör. Android cihaz)
Kargo hizmeti özelliklerini ayarlama
Android'de operatör hizmeti özellikleri, ses, mesajlaşma ve veri hizmetlerinin bir cihazda desteklenip desteklenmediğini açıklar. Operatörler, bir cihazın operatör hizmeti özelliklerini cihaz düzeyinde ve abonelik düzeyinde belirtebilir (Android 15 veya sonraki sürümler).
Cihaz düzeyinde hizmet özellikleri
Cihaz düzeyindeki hizmet özellikleri, cihaz üretilirken yapılandırılır (üretimden sonra değiştirilemez). Operatörler, aşağıdaki sistem kaynağı geçersiz kılmaları aracılığıyla cihaz düzeyindeki özellikleri belirtebilir:
Uygulamalar, aşağıdaki API'ler aracılığıyla cihaz düzeyindeki hizmet özelliklerini sorgulayabilir:
Abonelik düzeyinde hizmet özellikleri
Android 15 veya sonraki sürümlerin yüklü olduğu cihazlarda operatörler, abonelik düzeyinde cihazın hizmet özelliklerini belirtebilir. Abonelik düzeyinde hizmet özelliklerini belirtmek için
CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY
API'sini kullanın. Örneğin, bir aboneliğin yalnızca veri aboneliği olduğunu belirtmek için değeri
SubscriptionManager#SERVICE_CAPABILITY_DATA
olarak ayarlayın.
Uygulamalar (önceden yüklenmiş sistem uygulamaları ve üçüncü taraf uygulamaları),
SubscriptionInfo.getServiceCapabilities()
yöntemiyle belirli bir abonelik için operatör hizmeti özelliklerini sorgulayabilir. Bu sayede uygulama geliştiriciler, abonelik için kullanılabilen özelliklere göre uygulamaların kullanıcı deneyimini özelleştirebilir. Örneğin, uygulama geliştiriciler, kullanıcı yalnızca veri aboneliği kullanıyorsa arama uygulamasının arama yapmasına izin vermemesini sağlayabilir.
Kullanımdan kaldırılan hizmet özellikleri API'leri
Android 15'ten itibaren Android, hem cihaz düzeyinde hem de abonelik düzeyinde hizmet özellikleri sunar. Bu değişiklik nedeniyle, mevcut cihaz düzeyindeki özellik API'leri daha iyi okunabilmesi için yeniden adlandırıldı. Aşağıdaki tabloda, desteği sonlandırılan API'ler ve Android 15'te kullanıma sunulan, yeniden adlandırılmış API'ler listelenmektedir:
Kullanımdan kaldırıldı (Android 14 veya önceki sürümler) | Eşdeğer (Android 15 veya sonraki sürümler) |
---|---|
TelephonyManager.isVoiceCapable() |
TelephonyManager.isDeviceVoiceCapable() |
TelephonyManager.isSmsCapable() |
TelephonyManager.isDeviceSmsCapable() |