Android 9, IP Multimedya Alt Sistemi'ni (IMS) uygulamanıza yardımcı olmak için ImsService adlı yeni bir SystemApi arayüzü sunar. ImsService API, Android platformu ile tedarikçi veya operatör tarafından sağlanan IMS uygulaması arasında iyi tanımlanmış bir arayüzdür.
Şekil 1. ImsService'e genel bakış
IMS uygulayıcısı, ImsService arayüzünü kullanarak platforma sesli ve görüntülü görüşme sağlamak için IMS kayıt bilgileri, IMS üzerinden SMS entegrasyonu ve MmTel özellik entegrasyonu gibi önemli sinyal bilgileri sağlayabilir. ImsService API de bir Android sistem API'sidir. Yani kaynak yerine doğrudan Android SDK'sına göre derlenebilir. Cihaza önceden yüklenmiş bir IMS uygulaması da Play Store'da güncellenebilir şekilde yapılandırılabilir.
Örnekler ve kaynak
Android, test ve geliştirme amacıyla ImsService API'nin bölümlerini uygulayan bir uygulamayı AOSP'de sağlar. Uygulamayı /testapps/ImsTestService adresinde bulabilirsiniz.
ImsService API'nin belgelerini ImsService'te ve API'deki diğer sınıflarda bulabilirsiniz.
Uygulama
ImsService API, mevcut donanıma bağlı olarak IMS'yi birçok şekilde uygulamanıza olanak tanıyan üst düzey bir API'dir. Örneğin, uygulama, IMS uygulamasının tamamen uygulama işlemcisinde mi yoksa kısmen veya tamamen modeme mi aktarıldığına bağlı olarak değişir. Android, baz band işlemciye aktarma işlemi için herkese açık bir HAL sağlamaz. Bu nedenle, tüm aktarma işlemleri modem için HAL uzantınız kullanılarak yapılmalıdır.
Eski IMS uygulamalarıyla uyumluluk
Android 9, ImsService API'yi içerse de IMS için eski bir uygulama kullanan cihazlar API'yi destekleyemez.
Bu cihazlarda eski AIDL arayüzleri ve sarmalayıcı sınıfları android.telephony.ims.compat
ad alanına taşındı. Android 9'a yükseltme yaparken eski cihazların eski API'yi desteklemeye devam edebilmesi için aşağıdakileri yapması gerekir.
- ImsService uygulamasının ad alanını,
android.telephony.ims.compat
ad alanı API'sinden genişletilecek şekilde değiştirin. - AndroidManifest.xml'deki ImsService hizmet tanımını,
android.telephony.ims.ImsService
işlemi yerineandroid.telephony.ims.compat.ImsService
intent-filter işlemini kullanacak şekilde değiştirin.
Daha sonra çerçeve, eski ImsService
uygulamasıyla çalışmak için Android 9'da sağlanan uyumluluk katmanını kullanarak ImsService'e bağlanır.
Çerçeveye ImsService kaydı
ImsService API'si, Android çerçevesinin IMS uygulamasıyla iletişim kurmak için bağlandığı bir hizmet olarak uygulanır. Çerçeveye bir ImsService uygulayan bir uygulamayı kaydetmek için üç adım gerekir. Öncelikle, ImsService uygulaması kendisini uygulamanın AndroidManifest.xml
değerini kullanarak platforma kaydettirmelidir. İkinci olarak, uygulamanın hangi IMS özelliklerini desteklediğini (MmTel veya RCS) tanımlamalıdır. Üçüncü olarak da, operatör yapılandırmasında veya cihaz yer paylaşımında güvenilir IMS uygulaması olarak doğrulanmalıdır.
Hizmet tanımı
IMS uygulaması, aşağıdaki biçimi kullanıp manifeste service
girişi ekleyerek çerçeveyle bir ImsService kaydeder:
<service
android:name="com.egcorp.ims.EgImsService"
android:directBootAware="true"
Android:persistent="true"
...
android:permission="android.permission.BIND_IMS_SERVICE" >
...
<intent-filter>
<action android:name="android.telephony.ims.ImsService" />
</intent-filter>
</service>
AndroidManifest.xml
içindeki service
tanımı, doğru çalışma için gerekli olan aşağıdaki özellikleri tanımlar:
directBootAware="true"
: Kullanıcı cihazın kilidini açmadan önce hizmetintelephony
tarafından keşfedilmesini ve çalıştırılmasını sağlar. Kullanıcı cihazın kilidini açmadan önce hizmet, cihaz şifrelenmiş depolamaya erişemez. Daha fazla bilgi için Doğrudan önyükleme modunu destekleme ve Dosya tabanlı şifreleme başlıklı makaleleri inceleyin.persistent="true"
: Bu hizmetin sürekli olarak çalıştırılmasına ve bellek geri almak için sistem tarafından kapatılmamasına olanak tanır. Bu özellik YALNIZCA uygulama sistem uygulaması olarak oluşturulmuşsa çalışır.permission="android.permission.BIND_IMS_SERVICE"
: YalnızcaBIND_IMS_SERVICE
izni verilen bir sürecin uygulamaya bağlanmasını sağlar. Çerçeve yalnızca sistem uygulamalarına izin verebileceğinden, bu izin kötü amaçlı bir uygulamanın hizmete bağlanmasını engeller.
Hizmet, android.telephony.ims.ImsService
işlemini içeren intent-filter
öğesini de belirtmelidir. Bu sayede çerçeve ImsService
öğesini bulabilir.
IMS özellik spesifikasyonu
ImsService, AndroidManifest.xml'de Android hizmeti olarak tanımlandıktan sonra desteklediği IMS özelliklerini tanımlamalıdır. Android şu anda MmTel ve RCS özelliklerini desteklemektedir ancak yalnızca MmTel çerçeveye entegre edilmiştir. Çerçeveye entegre edilmiş RCS API'si olmasa da bu özelliği ImsService'in bir özelliği olarak belirtmenin avantajları vardır.
Aşağıda, bir ImsService tarafından sağlanabilecek android.telephony.ims.ImsFeature
maddesinde tanımlanan geçerli özelliklerin yanı sıra bir IMS uygulamasının bu özelliklerden birini veya tümünü neden uygulamak isteyebileceğine dair bir açıklama ve örnek verilmiştir. Her özellik tanımlandıktan sonra bu sayfada, ImsService
öğesinin her SIM yuvası için tanımladığı özellik grubunu nasıl açıkladığı özetlenir.
FEATURE_MMTEL
ImsService
, acil durum araması için IMS PDN'ye acil durum eki dışında tüm IMS medyalarına (IR.92 ve IR.94 spesifikasyonları) destek içeren IMS MMTEL özelliğini uygular. MMTEL özelliklerini desteklemek isteyen tüm ImsService
uygulamalarında android.telephony.ims.MmTelFeature
temel sınıfı genişletmeli ve ImsService#createMmTelFeature
içinde özel bir MmTelFeature
uygulaması döndürülmelidir.
FEATURE_EMERGENCY_MMTEL
Bu özelliğin bildirilmesi yalnızca, platforma acil durum hizmetleri için IMS PDN'ye acil durum bağlantısının yapılabileceği sinyalini verir. Bu özellik ImsService
cihazınız için bildirilmezse platform, acil durum hizmetleri için her zaman varsayılan olarak devre anahtarı yedeğini kullanır. Bu özelliğin tanımlanabilmesi için FEATURE_MMTEL
özelliği tanımlanmış olmalıdır.
FEATURE_RCS
ImsService API, IMS RCS özelliklerini uygulamaz ancak android.telephony.ims.RcsFeature
temel sınıfı yine de yararlı olabilir. Çerçeve, paketin RCS sağlaması gerektiğini algıladığında ImsService'e otomatik olarak bağlanır ve ImsService#createRcsFeature
'yi çağırır. RCS hizmetiyle ilişkili SIM kart kaldırılırsa çerçeve otomatik olarak RcsFeature#onFeatureRemoved
çağrısını yapar ve ardından RCS özelliğiyle ilişkili ImsService
öğesini temizler. Bu işlev, bir RCS özelliğinin sağlaması gereken özel algılama veya bağlama mantığının bir kısmını kaldırabilir.
Desteklenen özelliklerin kaydı
Telefon çerçevesi, ImsService#querySupportedImsFeatures
API'yi kullanarak desteklediği özellikleri sorgulamak için önce ImsService'e bağlanır. Çerçeve, ImsService'in hangi özellikleri destekleyeceğini hesapladıktan sonra ImsService'in sorumlu olacağı her özellik için ImsService#create[...]Feature
işlevini çağırır. IMS uygulamasının desteklediği özellikler değişirse desteklenen özellikleri yeniden hesaplaması için çerçeveye sinyal göndermek üzere ImsService#onUpdateSupportedImsFeatures
kullanabilirsiniz. ImsService'in başlatılması ve bağlanması hakkında daha fazla bilgi için aşağıdaki şemaya bakın.
Şekil 2: ImsService'i başlatma ve bağlama
ImsService uygulamasının çerçeve algılama ve doğrulama
ImsService, AndroidManifest.xml'de doğru şekilde tanımlandıktan sonra platform, uygun olduğunda ImsService'e (güvenli bir şekilde) bağlanacak şekilde yapılandırılmalıdır. Çerçevenin bağlandığı iki tür ImsServices vardır:
- Operatör "override" ImsService: Bu ImsServices cihaza önceden yüklenmiş olsa da bir veya daha fazla hücresel operatöre bağlıdır ve yalnızca eşleşen bir SIM kart takıldığında bağlanır. Bu,
config_ims_mmtel_package_override_string
MMTEL özelliklerini uygulayan ImsServices için CarrierConfig anahtarı.- RCS özelliklerini uygulayan ImsServices için
config_ims_rcs_package_override_string
.
- Cihazın "varsayılan" ImsService: Bu, bir OEM tarafından cihaza yüklenen varsayılan ImsService'tir ve operatör ImsService'inin kullanılamadığı tüm durumlarda IMS hizmetleri sağlamak üzere tasarlanmalıdır. Cihazın takılı SIM kartı yoksa veya takılı SIM kartta operatör ImsService yüklü değilse bu ImsService faydalıdır. Bu, cihaz yer paylaşımında aşağıdaki yapılandırmalar kullanılarak tanımlanır:
config_ims_mmtel_package
: MMTEL özelliklerini uygularconfig_ims_rcs_package
: RCS özelliklerini uygular
Android, üçüncü taraflarca indirilebilen ImsService uygulamalarını desteklemez. Bu nedenle, burada tanımlanan tüm ImsService uygulamalarının sistem uygulaması olması ve uygun izinleri (ör. telefon, mikrofon, konum, kamera ve kişiler izinleri) vermek için /system/priv-app/ veya /product/priv-app/ klasöründe bulunması gerekir. IMS uygulamasının paket adının, yukarıda tanımlanan CarrierConfig veya cihaz yer paylaşımı değerleriyle eşleşip eşleşmediğini doğrulayarak yalnızca güvenilir, önceden yüklenmiş uygulamalar bağlanır.
Özelleştirme
ImsService kullanan uygulamalar yalnızca operatör tarafından "geçersiz kıl" ImsService veya MMTEL ya da RCS işlevi için cihaz "varsayılan" olarak yapılandırıldıkları cihazlara bağlıdır.
ImsService ayrıca, desteklediği IMS özelliklerinin (MMTEL ve RCS) ImsService#onUpdateSupportedImsFeatures
yöntemi kullanılarak güncellemeler kullanılarak dinamik olarak etkinleştirilmesine veya devre dışı bırakılmasına olanak tanır. Bu, hangi ImsServices'in bağlı olduğunu ve hangi özellikleri desteklediğini yeniden hesaplama çerçevesini tetikler. IMS uygulaması, desteklenen özellik içermeyen bir çerçeve güncellemesi yaparsa telefon yeniden başlatılana veya IMS uygulamasıyla eşleşen yeni bir SIM kart takılana kadar ImsService bağlanmaz.
Birden fazla ImsService için bağlama önceliği
Çerçeve, cihaza önceden yüklenmiş tüm olası ImsServices'e bağlanmayı destekleyemez ve SIM yuvarı başına iki adede kadar ImsServices'e (her özellik için bir ImsService) aşağıdaki sırayla özellik bazında bağlanır:
- SIM kart takılıyken CarrierConfig değeri
config_ims_[mmtel/rcs]_package_override_string
tarafından tanımlanan ImsService paket adı. config_ims_[mmtel/rcs]_package
için cihaz yer paylaşımı değerinde tanımlanan ImsService paketi adı, SIM kartın takılı olmadığı durumlar da dahildir. Bu ImsService, Acil Durum MmTel özelliğini DESTEKLEMELİDİR.
You must either have the package name of your ImsService defined in the CarrierConfig for each of the carriers that will use that package or in the device overlay if your ImsService will be the default, as defined above.
Bu metriği her bir özellik için ayrı ayrı inceleyelim. Tek SIM kart yüklü bir cihazda (tek veya çoklu SIM) iki IMS özelliği kullanılabilir: MMTel ve RCS. Çerçeve, her özellik için yukarıda tanımlanan sırayla bağlamaya çalışır. Bu özellik, Operatör Yapılandırması geçersiz kılmasında tanımlanan ImsService için kullanılamıyorsa çerçeve varsayılan ImsService hizmetinize döner. Örneğin, aşağıdaki tabloda, aşağıdaki özelliklere sahip bir sisteme ImsServices'i uygulayan üç IMS uygulamasının bulunduğu bir durumda çerçevenin hangi IMS özelliğini kullanacağı açıklanmaktadır:
- Operatör A ImsService RCS'yi destekler
- Operatör B ImsService, RCS ve MMTel'i destekler
- OEM ImsService, RCS ve MMTel'i destekler
SIM Kart Takıldı | RCS Özelliği | MMTel Özelliği |
---|---|---|
A Operatörü | A Operatörü | OEM |
Operatör B | Operatör B | Operatör B |
SIM kart yok | OEM | OEM |
Doğrulama
IMS spesifikasyonları son derece büyük olduğu ve özel doğrulama ekipmanları kullandığı için IMS uygulamasını doğrulamaya yönelik araçlar dahil edilmemiştir. Testler yalnızca telephony çerçevesinin ImsService API'ye doğru şekilde yanıt verdiğini doğrulayabilir.
IMS uygulaması geliştirme
Android telefon yığını ile arayüz oluşturan bir IMS uygulaması geliştirirken uygulamanın, belirli bir operatör aboneliği için eklenmiş ImsService örneğinin durumunu dinleyebilmesini veya değiştirebilmesini belirtmenizi öneririz.
MMTEL ve RCS özellikleri için ImsService'in durumunu dinlemek veya değiştirmek amacıyla ImsMmTelManager
, ImsRcsManager
veya IMS'ye özgü ProvisioningManager
sınıfının bir örneğini almak için ImsManager
sınıfını kullanın. Uygulama daha sonra IMS'ye özgü hizmet ve temel hazırlama durumlarını dinleyebilir. Örneğin:
- Etkin ve kullanılabilir MMTEL veya RCS özellikleri
- IMS kayıt durumu değiştiğinde yapılan güncellemeler
- IMS özelliklerinin temel hazırlık durumu
- Kullanıcının etkinleştirdiği IMS özellikleri
ImsStateCallback kullanma
ImsService kalıcı olarak bağlı bir hizmet olsa da yeni bir SIM kart veya yerleşik abonelik etkinleştiğinde ya da bir operatör yapılandırması değiştiğinde bağlı hizmet değişebilir. ImsService, telefon işleminin bir parçası olmadığından, ImsService görünmez bir şekilde kilitlenirse veya abonelik ya da yapılandırma değişikliği nedeniyle bağları kaldırılırsa uygulama, IMS API'lerine erişmeye çalışırken beklenmedik istisnalarla karşılaşabilir.
Android 13 veya sonraki sürümleri çalıştıran cihazlarda, ilişkili bir abonelik için ImsService örneğinin kullanılabilir olup olmadığını izlemek amacıyla ImsStateCallback
sınıfı kullanılabilir. ImsMmTelManager
veya ImsRcsManager
örneği alırken uygulamanın önce ImsMmTelManager#registerImsStateCallback
veya ImsRcsManager#registerImsStateCallback
kullanarak bir IMS durumu geri çağırma işlevine kaydolmasını öneririz.
ImsService tekrar kullanıma sunulduğunda belirli abonelikler için geri çağırma güncellemeleri almaya devam etmek istiyorsanız uygulamanın ImsMmTelManager
, ImsRcsManager
veya ProvisioningManager
üzerinden kayıtlı mevcut geri çağırmaların kaydını iptal etmesi veya bunları silmesi ve yeni geri çağırma kayıt etmesi gerekir.
IMS'yi desteklemeyen bir abonelik varsa çerçeve, REASON_NO_IMS_SERVICE_CONFIGURED
nedenini belirterek ImsStateCallback#onUnavailable
işlevini çağırır.
Bu, abonelik için ImsService ve IMS ile ilgili API'lerin kullanılamayacağı anlamına gelir.
Telefon işleminin çökmesi ihtimaline karşı uygulama ImsStateCallback#onError
alır ve artık kayıtlı ImsStateCallback
örneğiyle ilgili güncelleme almaz.
Bu koşuldan kurtulmak için ImsMmTelManager#registerImsStateCallback
veya ImsRcsManager#registerImsStateCallback
numaralı telefonu arayarak ilişkilendirilmiş abonelik için ImsStateCallback
örneğini yeniden kaydedin.