Android 6.0 ve sonraki sürümler, ayrıcalıklı uygulamaların platforma operatöre özgü yapılandırma sağlamasına olanak tanır. 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 yer paylaşımlarından kaldırılmasına olanak tanır ve operatörlere ile OEM'lere, tanımlanmış bir arayüz üzerinden platforma operatör yapılandırmasını dinamik olarak sağlama olanağı verir.
Düzgün şekilde imzalanan operatör uygulamaları, sistem resmine önceden yüklenebilir, otomatik olarak yüklenebilir veya bir uygulama mağazasından manuel olarak yüklenebilir. Uygulama, platform tarafından aşağıdakiler gibi ayarların yapılandırmasını sağlamak için 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ğini belirleme 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 başlıca avantajları şunlardır:
- Dinamik yapılandırma: MCCMNC'den türetilmemiş yapılandırma (ör. mobil sanal ağ operatörleri (MVNO'lar) veya müşterinin ekstra hizmetleri etkinleştirmesi) gibi kavramlar için destek.
- Herhangi bir kanal üzerinden satılan cihazlar için destek: Örneğin, açık pazardaki bir telefon, uygulama mağazasından bir uygulama indirerek 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: Daha önce bu yapılandırma, herkese açık bir API üzerinden değil, çoğunlukla çerçeve içindeki dahili XML yer paylaşımlarında depolanıyordu. Android 6.0'taki operatör yapılandırma API'si herkese açık 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 telefonla ilgili çeşitli davranışları değiştiren bir anahtar/değer çiftleri kümesidir.
Belirli bir cihaza ait değer grubu, aşağıdaki bileşenler sırayla sorgulanarak belirlenir:
- Operatör uygulaması (isteğe bağlıdır ancak Android Açık Kaynak Projesi'nde (AOSP) mevcut olanın ötesinde ek yapılandırma için önerilen konumdur)
- Sistem görüntüsüyle birlikte paketlenen 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üyle birlikte genel bir platform yapılandırma uygulaması bulunur. Bu uygulama, normal operatör uygulamasının sağlamadığı tüm değişkenler için değer sağlayabilir. Platform yapılandırma uygulamasını (Android 6.0'ta) şuradan bulabilirsiniz: packages/apps/CarrierConfig
Bu uygulamanın amacı, operatör uygulaması yüklü değilken ağ başına bazı yapılandırmalar sağlamaktır. Operatörler/OEM'ler kendi resimlerinde 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ıdır. Bu sayede güncellemeler, uygulama mağazaları gibi platformlar üzerinden dağıtılabilir.
Operatör uygulamasına ayrıcalık nasıl verilir?
Söz konusu operatör uygulaması, UICC Operatör Ayrıcalıkları bölümünde belirtildiği gibi SIM kartta bulunan sertifikayla imzalanmalıdır.
Operatör uygulamasına hangi bilgiler iletilir?
Operatör uygulamasına aşağıdaki değerler sağlanır. Bu değerler, hangi değerleri döndüreceğine dair dinamik bir karar vermesini sağlar:
- MCC
- MNC
- SPN
- IMSI
- GID1
- GID2
- Operatör kimliği
Operatör kimliklerini entegre etme hakkında daha fazla bilgi için Operatör kimliklerini CarrierConfig ile entegre etme başlıklı makaleyi inceleyin.
Operatör yapılandırması yüklenirken
Anahtar/değer çiftleri listesi şu durumlarda oluşturulur:
- SIM yüklendiğinde (açılış veya SIM sıcak değişimi)
- Operatör uygulaması manuel olarak yeniden yüklemeyi 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, içindeki değerler aşağıdakiler dahil olmak üzere sistem yapılandırmasının çeşitli değerlerini ayarlamak için kullanılır:
- Dahili çerçeve telefon ayarları
- SDK tarafından döndürülen yapılandırma değerleri (ör. SmsManager)
- Arama uygulamasındaki VVM bağlantı değerleri gibi uygulama ayarları
Yapılandırma anahtarları
Anahtar listesi, android.telephony.CarrierConfigManager
'te herkese açık SDK'nın bir parçası olarak tanımlanır ve aynı API düzeyinde değiştirilemez. Anahtarların özetini aşağıdaki tabloda bulabilirsiniz.
Uygulamayı oluşturma
Uygulamayı oluşturma
Uygulamanız Android 6.0 API düzeyini (23) hedeflemelidir.
android.service.carrier.CarrierService sınıfını geçersiz kılan bir sınıf tanımlayın.
- İletilen
service.carrier.CarrierIdentifier
nesnesine göre sağlamak istediğiniz değerleri döndürmek içinonLoadConfig
değerini geçersiz kılı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
çağrısı 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.
Manifest dosyasında 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 imzalama
Koşullar için UICC Operatör Ayrıcalıkları başlıklı makaleyi inceleyin.
Operatör uygulamasıyla APN ekleme
APN'leri bir operatör uygulamasından programatik olarak eklemek için (ör. SIM etkinleştirme sırasında), URI ile tanımlanan bir içerik sağlayıcıya APN öğeleri eklemek üzere
ContentResolver
API'lerini kullanın
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ı derledikten sonra kodunuzu şu yöntemlerle test edebilirsiniz:
- Geçerli bir sertifika imzası içeren bir SIM kartı
- Android 6.0 ve sonraki sürümleri çalıştıran bir cihaz (ör. Android cihaz)
Operatör hizmeti özelliklerini ayarlama
Android'de operatör hizmeti özellikleri, bir cihazda ses, mesajlaşma ve veri hizmetlerinin desteklenip desteklenmediğini belirtir. Operatörler, bir cihazın operatör hizmeti özelliklerini cihaz düzeyinde ve abonelik düzeyinde (Android 15 veya sonraki sürümler) belirtebilir.
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ılma işlemleri aracılığıyla cihaz düzeyinde özellikleri belirtebilir:
Uygulamalar, cihaz düzeyindeki hizmet özelliklerini aşağıdaki API'ler aracılığıyla sorgulayabilir:
Abonelik düzeyinde hizmet özellikleri
Android 15 veya sonraki sürümleri çalıştıran cihazlarda operatörler, cihazın abonelik düzeyindeki servis özelliklerini belirtebilir. Abonelik düzeyinde hizmet özelliklerini belirtmek için
CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY
API'yi kullanın. Örneğin, bir aboneliğin yalnızca veri içerdiğini 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öntemini kullanarak belirli bir abonelik için operatör hizmeti özelliklerini sorgulayabilir. Bu sayede uygulama geliştiriciler, abonelik için mevcut özelliklere göre uygulamaların kullanıcı deneyimini özelleştirebilir. Örneğin, uygulama geliştiriciler, kullanıcı yalnızca veri planı kullanıyorsa numara çevirme uygulamasının arama yapmaya 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 özellikler API'leri okunabilirliği iyileştirmek için yeniden adlandırıldı. Aşağıdaki tabloda, desteği sonlandırılan API'ler ve Android 15'te kullanıma sunulan ve adı değiştirilen API'ler listelenmiştir:
Desteği sonlandırıldı (Android 14 veya önceki sürümler) | Eşdeğer (Android 15 veya daha yeni sürümler) |
---|---|
TelephonyManager.isVoiceCapable() |
TelephonyManager.isDeviceVoiceCapable() |
TelephonyManager.isSmsCapable() |
TelephonyManager.isDeviceSmsCapable() |