Görüşme uygulaması, kullanıcıların cihazlarında sesli veya görüntülü görüşme yapmasına veya yapmasına olanak tanır. Telefon etme uygulamaları, aşağıdaki ekran görüntüsünde gösterildiği gibi, varsayılan Telefon uygulaması arayüzünü kullanmak yerine, kendi kullanıcı arayüzlerini kullanır.
Android çerçevesi, telekomünikasyon çerçevesine göre bir çağrı uygulaması oluşturmanıza yardımcı olacak sınıflar içeren android.telecom
paketini içerir. Uygulamanızı telekomünikasyon çerçevesine göre oluşturmak aşağıdaki avantajları sağlar:
- Uygulamanız, cihazdaki yerel telekom alt sistemiyle doğru bir şekilde birlikte çalışıyor.
- Uygulamanız, çerçeveye uygun olan diğer çağrı uygulamalarıyla da doğru bir şekilde birlikte çalışıyor.
- Bu çerçeve, uygulamanızın ses ve video yönlendirmesini yönetmesine yardımcı olur.
- Bu çerçeve, uygulamanızın çağrılarının odak noktası olup olmadığını belirlemesine yardımcı olur.
Manifest beyanları ve izinleri
Uygulama manifestinizde, aşağıdaki örnekte gösterildiği gibi uygulamanızın MANAGE_OWN_CALLS
iznini kullandığını beyan edin:
<manifest … >
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS"/>
</manifest>
Uygulama izinlerini bildirme hakkında daha fazla bilgi için İzinler bölümüne bakın.
Uygulamanızda ConnectionService
sınıfını uygulayan sınıfı belirten bir hizmet bildirmeniz gerekir. Telekom alt sistemi, hizmetin BIND_TELECOM_CONNECTION_SERVICE
izninin bağlanabileceğini belirtmesini gerektirir. Aşağıdaki örnekte, uygulama manifestinizde hizmetin nasıl beyan edileceği gösterilmektedir:
<service android:name="com.example.MyConnectionService"
android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
<intent-filter>
<action android:name="android.telecom.ConnectionService" />
</intent-filter>
</service>
Hizmetler dahil olmak üzere uygulama bileşenlerini bildirme hakkında daha fazla bilgi için Uygulama Bileşenleri bölümüne bakın.
Bağlantı hizmetini uygulayın
Arama uygulamanız, telekom alt sisteminin bağlanabileceği ConnectionService
sınıfının bir uygulamasını sağlamalıdır.
ConnectionService
uygulamanız aşağıdaki yöntemleri geçersiz kılar:
onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest)
Telekom alt sistemi, uygulamanızın yeni bir giden çağrı oluşturmak için
placeCall(Uri, Bundle)
yöntemini çağırmasına yanıt olarak bu yöntemi çağırır. Uygulamanız, yeni giden çağrıyı temsil etmek içinConnection
sınıfı uygulamanızın yeni bir örneğini döndürür (daha fazla bilgi için Bağlantıyı uygulama bölümüne bakın). Aşağıdaki işlemleri gerçekleştirerek giden bağlantıyı daha da özelleştirebilirsiniz:- Uygulamanız, bağlantının bir çağrı uygulamasından kaynaklandığını belirtmek için bağımsız değişken olarak
PROPERTY_SELF_MANAGED
sabitiylesetConnectionProperties(int)
yöntemini çağırmalıdır. - Uygulamanız çağrıların beklemeye alınmasını destekliyorsa
setConnectionCapabilities(int)
yöntemini çağırın ve bağımsız değişkeniCAPABILITY_HOLD
veCAPABILITY_SUPPORT_HOLD
sabitlerinin bit maskesi değerine ayarlayın. - Arayanın adını ayarlamak için, arayanın adının gösterilmesi gerektiğini belirtmek üzere
int
parametresi olarakPRESENTATION_ALLOWED
sabitini iletensetCallerDisplayName(String, int)
yöntemini kullanın. - Giden çağrının uygun video durumuna sahip olduğundan emin olmak için
Connection
nesnesininsetVideoState(int)
yöntemini çağırın veConnectionRequest
nesnesiningetVideoState()
yöntemi tarafından döndürülen değeri gönderin.
- Uygulamanız, bağlantının bir çağrı uygulamasından kaynaklandığını belirtmek için bağımsız değişken olarak
onCreateOutgoingConnectionFailed(PhoneAccountHandle, ConnectionRequest)
Uygulamanız
placeCall(Uri, Bundle)
yöntemini çağırdığında ve giden arama yapılamadığında telekom alt sistemi bu yöntemi çağırır. Bu durumda uygulamanız, kullanıcıya giden aramanın yapılamadığını bildirmelidir (örneğin, uyarı kutusu veya kısa mesaj göndererek). Devam eden bir acil durum araması varsa veya başka bir uygulamada arama yapılmadan önce beklemeye alınamayan devam eden bir arama varsa uygulamanız arama yapamayabilir.onCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest)
Uygulamanız, uygulamanızda yeni bir gelen çağrıyı bildirmek için
addNewIncomingCall(PhoneAccountHandle, Bundle)
yöntemini çağırdığında telekom alt sistemi bu yöntemi çağırır. Uygulamanız, yeni gelen aramayı temsil etmek içinConnection
uygulamanızın yeni bir örneğini döndürür (daha fazla bilgi için Bağlantıyı uygulama bölümüne bakın). Aşağıdaki işlemleri gerçekleştirerek gelen bağlantıyı daha da özelleştirebilirsiniz:- Uygulamanız, bağlantının bir çağrı uygulamasından kaynaklandığını belirtmek için bağımsız değişken olarak
PROPERTY_SELF_MANAGED
sabitiylesetConnectionProperties(int)
yöntemini çağırmalıdır. - Uygulamanız çağrıların beklemeye alınmasını destekliyorsa
setConnectionCapabilities(int)
yöntemini çağırın ve bağımsız değişkeniCAPABILITY_HOLD
veCAPABILITY_SUPPORT_HOLD
sabitlerinin bit maskesi değerine ayarlayın. - Arayanın adını ayarlamak için, arayanın adının gösterilmesi gerektiğini belirtmek üzere
int
parametresi olarakPRESENTATION_ALLOWED
sabitini iletensetCallerDisplayName(String, int)
yöntemini kullanın. - Gelen aramanın telefon numarasını veya adresini belirtmek için
Connection
nesnesininsetAddress(Uri, int)
yöntemini kullanın. - Giden çağrının uygun video durumuna sahip olduğundan emin olmak için
Connection
nesnesininsetVideoState(int)
yöntemini çağırın veConnectionRequest
nesnesiningetVideoState()
yöntemi tarafından döndürülen değeri gönderin.
- Uygulamanız, bağlantının bir çağrı uygulamasından kaynaklandığını belirtmek için bağımsız değişken olarak
onCreateIncomingConnectionFailed(PhoneAccountHandle, ConnectionRequest)
Uygulamanız, Telekom'a yeni bir gelen aramayı bildirmek için
addNewIncomingCall(PhoneAccountHandle, Bundle)
yöntemini çağırdığında telekom alt sistemi bu yöntemi çağırır ancak gelen çağrıya izin verilmez (daha fazla bilgi için arama kısıtlamalarına bakın). Uygulamanız gelen aramayı sessiz bir şekilde reddetmeli ve isteğe bağlı olarak kullanıcıyı cevapsız arama hakkında bilgilendirmek için bir bildirim yayınlamalıdır.
Bağlantıyı uygulayın
Uygulamanız, uygulamanızdaki çağrıları temsil etmek için Connection
adlı bir alt sınıf oluşturmalıdır. Uygulamanızda aşağıdaki yöntemleri geçersiz kılmanız gerekir:
onShowIncomingCallUi()
Yeni bir gelen arama eklediğinizde telekom alt sistemi bu yöntemi çağırır ve uygulamanız gelen arama kullanıcı arayüzünü gösterir.
onCallAudioStateChanged(CallAudioState)
Telekom alt sistemi, uygulamanıza mevcut ses rotasının veya modunun değiştiğini bildirmek için bu yöntemi çağırır. Bu işlev, uygulamanızın
setAudioRoute(int)
yöntemi kullanılarak ses modunu değiştirmesi sonucunda çağrılır. Bu yöntem, sistem ses rotasını değiştirdiğinde de (örneğin, Bluetooth mikrofonlu kulaklık bağlantısı kesildiğinde) çağrılabilir.onHold()
Telekom alt sistemi, bir çağrıyı beklemeye almak istediğinde bu yöntemi çağırır. Bu isteğe yanıt olarak, uygulamanız çağrıyı beklemeye alıp ardından çağrının bekletildiğini sisteme bildirmek için
setOnHold()
yöntemini çağırmalıdır. Android Auto gibi bir çağrı hizmeti, çağrınızı beklemeye almak için bir kullanıcı isteğini yeniden aktarmak istediğinde telekom alt sistemi bu yöntemi çağırabilir. Kullanıcı, aramayı başka bir uygulamada etkin hale getirirse telekom alt sistemi de bu yöntemi çağırır. Çağrı içi hizmetler hakkında daha fazla bilgi içinInCallService
adresine bakın.onUnhold()
Telekom alt sistemi, beklemeye alınmış bir çağrıyı devam ettirmek istediğinde bu yöntemi çağırır. Uygulamanız çağrıyı devam ettirdikten sonra, sisteme çağrının artık beklemede olmadığını bildirmek için
setActive()
yöntemini çağırmalıdır. Android Auto gibi bir çağrı hizmeti, çağrınızı devam ettirmek için bir isteği aktarmak istediğinde telekomünikasyon alt sistemi bu yöntemi çağırabilir. Görüşme içi hizmetler hakkında daha fazla bilgi içinInCallService
inceleyin.onAnswer()
Telekom alt sistemi, gelen bir aramanın yanıtlanması gerektiğini uygulamanıza bildirmek için bu yöntemi çağırır. Uygulamanız çağrıyı cevapladıktan sonra, çağrının yanıtlandığını sisteme bildirmek için
setActive()
yöntemini çağırmalıdır. Uygulamanız yeni bir gelen çağrı eklediğinde ve zaten başka bir uygulamada beklemeye alınamayan devam eden bir çağrı varsa telekom alt sistemi bu yöntemi çağırabilir. Bu gibi durumlarda telekom alt sistemi, gelen arama kullanıcı arayüzünü uygulamanız adına görüntüler. Çerçeve, çağrıyı cevaplayacağınız video durumunu belirtmek için destek sağlayan aşırı yüklenmiş bir yöntem sağlar. Daha fazla bilgi içinonAnswer(int)
sayfasını inceleyin.onReject()
Telekom alt sistemi, gelen bir çağrıyı reddetmek istediğinde bu yöntemi çağırır. Uygulamanız çağrıyı reddettikten sonra,
setDisconnected(DisconnectCause)
yöntemini çağırmalı ve parametre olarakREJECTED
değerini belirtmelidir. Ardından uygulamanız, çağrıyı işlediğini sisteme bildirmek içindestroy()
yöntemini çağırır. Kullanıcı, uygulamanızdan gelen bir aramayı reddettiğinde telekom alt sistemi bu yöntemi çağırır.onDisconnect()
Telekom alt sistemi, bir çağrının bağlantısını kesmek istediğinde bu yöntemi çağırır. Görüşme sona erdiğinde, uygulamanız
setDisconnected(DisconnectCause)
yöntemini çağırmalı ve bir kullanıcı isteğinin aramanın bağlantısının kesilmesine neden olduğunu belirtmek için parametre olarakLOCAL
yöntemini belirtmelidir. Bunun ardından uygulamanız, telekom alt sistemine uygulamanın çağrıyı işlediğini bildirmek içindestroy()
yöntemini çağırır. Kullanıcı, Android Auto gibi başka bir çağrı içi hizmet aracılığıyla yaptığı bir aramanın bağlantısını kestiğinde sistem bu yöntemi çağırabilir. Sistem, başka bir çağrının yapılmasına izin vermek için çağrınızın bağlantısının kesilmesi gerektiğinde de (örneğin, kullanıcı acil durum araması yapmak istediğinde) bu yöntemi çağırır. Görüşme içi hizmetler hakkında daha fazla bilgi içinInCallService
bölümüne bakın.
Yaygın çağrı senaryolarını ele alın
Çağrı akışınızda ConnectionService
API'den yararlanmak için android.telecom
paketindeki diğer sınıflarla etkileşimde bulunmanız gerekir. Aşağıdaki bölümlerde yaygın çağrı senaryoları ve uygulamanızın bunları ele almak için API'leri nasıl kullanması gerektiği açıklanmaktadır.
Gelen sesli aramaları yanıtlama
Gelen aramaları işleme akışı, diğer uygulamalarda arama olup olmamasına bakılmaksızın değişir. Akışlardaki farkın nedeni, cihazdaki tüm çağrı uygulamaları için kararlı bir ortam sağlamak amacıyla diğer uygulamalarda aktif çağrılar olduğunda telekomünikasyon çerçevesinin bazı kısıtlamalar belirlemesinin gerekmesidir. Daha fazla bilgi için Arama kısıtlamaları bölümünü inceleyin.
Diğer uygulamalarda etkin arama yok
Başka uygulamalarda etkin arama olmadığında gelen aramaları yanıtlamak için aşağıdaki adımları uygulayın:
- Uygulamanız, normal mekanizmalarını kullanarak yeni bir arama alıyor.
- Telekom alt sistemini yeni gelen arama hakkında bilgilendirmek için
addNewIncomingCall(PhoneAccountHandle, Bundle)
yöntemini kullanın. - Telekom alt sistemi, uygulamanızın
ConnectionService
uygulamasına bağlanır veonCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest)
yöntemini kullanarak yeni gelen aramayı temsil edenConnection
sınıfının yeni bir örneğini ister. - Telekom alt sistemi, uygulamanızı
onShowIncomingCallUi()
yöntemini kullanarak gelen arama kullanıcı arayüzünü göstermesi gerektiği konusunda bilgilendirir. - Uygulamanız, gelen kullanıcı arayüzünü, ilişkili tam ekran intent'le birlikte bir bildirim kullanarak gösterir. Daha fazla bilgi için
onShowIncomingCallUi()
inceleyin. - Kullanıcı gelen aramayı kabul ederse
setActive()
yöntemini çağırın veya kullanıcı gelen çağrıyı reddedersesetDisconnected(DisconnectCause)
tarafından parametre olarakREJECTED
belirterekdestroy()
yöntemine çağrı yapın.
Diğer uygulamalarda bulunan ve beklemeye alınamayan etkin aramalar
Diğer uygulamalarda, beklemeye alınamayan aktif aramalar olduğunda gelen aramaları yanıtlamak için aşağıdaki adımları uygulayın:
- Uygulamanız, normal mekanizmalarını kullanarak yeni bir arama alıyor.
- Telekom alt sistemini yeni gelen arama hakkında bilgilendirmek için
addNewIncomingCall(PhoneAccountHandle, Bundle)
yöntemini kullanın. - Telekom alt sistemi, uygulamanızın
ConnectionService
uygulamasına bağlanır veonCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest)
yöntemini kullanarak yeni gelen çağrıyı temsil edenConnection
nesnesinin yeni bir örneğini ister. - Telekom alt sistemi, gelen çağrınız için gelen çağrı kullanıcı arayüzünü görüntüler.
- Kullanıcı çağrıyı kabul ederse telekom alt sistemi
onAnswer()
yöntemini çağırır. Telekom alt sistemine çağrının bağlandığını belirtmek içinsetActive()
yöntemini çağırmanız gerekir. - Kullanıcı çağrıyı reddederse telekom alt sistemi
onReject()
yöntemini çağırır. Parametre olarakREJECTED
'yi belirtensetDisconnected(DisconnectCause)
yöntemini ve ardındandestroy()
yöntemi çağrısını çağırmanız gerekir.
Giden arama yapma
Giden arama yapma akışı, telekomünikasyon çerçevesinin uyguladığı kısıtlamalar nedeniyle aramanın yapılamama ihtimalinin ele alınmasını içerir. Daha fazla bilgi için Arama kısıtlamaları başlıklı makaleyi inceleyin.
Giden arama yapmak için aşağıdaki adımları uygulayın:
- Kullanıcı, uygulamanızda giden arama başlatır.
- Telekom alt sistemini yeni giden arama hakkında bilgilendirmek için
placeCall(Uri, Bundle)
yöntemini kullanın. Yöntem parametreleriyle ilgili olarak aşağıdakileri göz önünde bulundurun:Uri
parametresi, çağrının yapıldığı adresi temsil eder. Normal telefon numaraları içintel:
URI şemasını kullanın.Bundle
parametresi, uygulamanızınPhoneAccountHandle
nesnesiniEXTRA_PHONE_ACCOUNT_HANDLE
ekstrasına ekleyerek çağrı uygulamanız hakkında bilgi sağlamanıza olanak tanır. Uygulamanız, giden her çağrıyaPhoneAccountHandle
nesnesini sağlamalıdır.Bundle
parametresi,EXTRA_START_CALL_WITH_VIDEO_STATE
ekstra öğesindeSTATE_BIDIRECTIONAL
değerini belirterek giden çağrının video içerip içermediğini belirtmenize de olanak tanır. Telekom alt sisteminin, görüntülü görüşmeleri varsayılan olarak hoparlöre yönlendirdiğini unutmayın.
- Telekom alt sistemi, uygulamanızın
ConnectionService
uygulamasına bağlanır. - Uygulamanız giden arama yapamazsa telekom alt sistemi, uygulamanıza çağrının şu anda yapılamayacağını bildirmek için
onCreateOutgoingConnectionFailed(PhoneAccountHandle, ConnectionRequest)
yöntemini çağırır. Uygulamanız, kullanıcıya arama yapılamayacağını bildirmelidir. - Uygulamanız giden aramayı gerçekleştirebiliyorsa telekom alt sistemi
onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest)
yöntemini çağırır. Uygulamanız, yeni giden çağrıyı temsil etmek içinConnection
sınıfınızın bir örneğini döndürmelidir. Bağlantıda ayarlamanız gereken özellikler hakkında daha fazla bilgi için Bağlantı hizmetini uygulama bölümüne bakın. - Giden çağrı bağlandığında, telekom alt sistemine aramanın etkin olduğunu bildirmek için
setActive()
yöntemini çağırın.
Çağrıyı bitirme
Bir aramayı sonlandırmak için aşağıdaki adımları uygulayın:
- Kullanıcı çağrıyı sonlandırdıysa
LOCAL
gönderensetDisconnected(DisconnectCause)
parametresini, diğer taraf aramayı sonlandırdıysa parametre olarakREMOTE
değerini gönderin. destroy()
yöntemini çağırın.
Arama kısıtlamaları
Kullanıcılarınıza tutarlı ve basit bir arama deneyimi sunmak için telekomünikasyon çerçevesi, cihazdaki çağrıların yönetilmesinde bazı kısıtlamalar uygular. Örneğin, kullanıcının kendi kendine yönetilen ConnectionService
API'sini (FoTalk ve BarTalk) uygulayan iki çağrı uygulaması yüklediğini varsayalım. Bu durumda aşağıdaki kısıtlamalar geçerli olur:
API düzeyi 27 veya altını çalıştıran cihazlarda aynı anda yalnızca bir uygulama devam eden bir çağrıyı sürdürebilir. Bu kısıtlama, kullanıcı FooTalk uygulamasını kullanarak devam eden bir arama yaparken BarTalk uygulamasının yeni bir arama başlatamayacağı veya alamayacağı anlamına gelir.
API düzeyi 28 veya sonraki sürümleri çalıştıran cihazlarda hem FooTalk hem de BarTalk
CAPABILITY_SUPPORT_HOLD
veCAPABILITY_HOLD
izinleri beyan ediyorsa kullanıcı, başka bir çağrı başlatmak veya yanıtlamak için uygulamalar arasında geçiş yaparak birden fazla devam eden çağrıyı sürdürebilir.Kullanıcı normal yönetilen aramalar yapıyorsa (örneğin, yerleşik Telefon veya Çevirici uygulamasını kullanarak) arama uygulamalarından kaynaklanan aramalara dahil edilemez. Bu, kullanıcı mobil operatörünü kullanarak düzenli bir aramadaysa aynı anda bir FooTalk veya BarTalk aramasında da bulunamayacağı anlamına gelir.
Kullanıcı bir acil durum araması ararsa telekom alt sistemi, uygulamanızın aramalarının bağlantısını keser.
Kullanıcı acil durum araması yaparken uygulamanız arama alamaz veya yapamaz.
Uygulamanız gelen bir arama aldığında başka bir arama uygulamasında devam eden bir çağrı varsa gelen çağrıyı cevapladığınızda, diğer uygulamada devam eden tüm çağrılar sonlandırılır. Uygulamanız, her zamanki gelen arama kullanıcı arayüzünü görüntülememelidir. Telekomünikasyon çerçevesi gelen arama kullanıcı arayüzünü görüntüler ve kullanıcıya, yeni çağrı cevaplandığında devam eden çağrıların sona ereceğini bildirir. Diğer bir deyişle, kullanıcı bir FooTalk aramasındaysa ve BarTalk uygulaması gelen bir arama alırsa, telekomünikasyon çerçevesi kullanıcıya yeni bir BarTalk araması olduğunu ve BarTalk çağrısına cevap verildiğinde kullanıcının FooTalk aramasının sona ereceğini bildirir.