Arama uygulaması, kullanıcıların cihazlarına sesli veya görüntülü görüşme yapmalarına ya da olanak tanır. Uygulamalar, aramalar için aşağıdaki ekran görüntüsünde gösterildiği gibi, varsayılan Telefon uygulaması arayüzü.
Android çerçevesi, android.telecom
paketini içerir.
telekomünikasyon sektörüne uygun olarak arama uygulaması geliştirmenize yardımcı olacak
bahsedeceğim. Uygulamanızı telekomünikasyon çerçevesine göre geliştirmek
şu avantajları sağlar:
- Uygulamanız Google Haritalar'daki yerel telekom alt sistemiyle olanak tanır.
- Uygulamanız, şunlara da uyan diğer arama uygulamalarıyla doğru şekilde birlikte çalışıyor: bilmek zorundasınız.
- Bu çerçeve, uygulamanızın ses ve video yönlendirmeyi 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, uygulamanızın
MANAGE_OWN_CALLS
izninin değerini değiştirin:
<manifest … >
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS"/>
</manifest>
Uygulama izinlerini beyan etme hakkında daha fazla bilgi için bkz. İzinler.
Uygulamanızda ConnectionService
sınıf bulunuyor. Telekomünikasyon
alt sistem, hizmetin BIND_TELECOM_CONNECTION_SERVICE
iznini beyan etmesini gerektirir.
çok kolay oluyor. Aşağıdaki örnekte,
uygulama manifestiniz:
<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 de dahil olmak üzere uygulama bileşenlerini bildirme hakkında daha fazla bilgi için bkz. Uygulama Bileşenleri.
Bağlantı hizmetini uygulama
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 kullanabilirsiniz:
onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest)
Telekomünikasyon alt sistemi, çeşitli fonksiyonlara yanıt olarak uygulamanız
placeCall(Uri, Bundle)
numarasını arıyor simgesine dokunun. Uygulamanız,Connection
sınıfı uygulamanızın yeni bir örneğini döndürüyor (daha fazla bilgi için bkz. Bağlantıyı uygulayın) giden çağrıya dokunun. Giden bağlantınızı aşağıdaki adımları uygulayarak daha da özelleştirebilirsiniz: şu işlemleri yapabilirsiniz:- Uygulamanız, bağımsız değişken olarak
PROPERTY_SELF_MANAGED
sabitini kullanaraksetConnectionProperties(int)
yöntemini çağırmalıdır ifadesini ekleyin. - Uygulamanız aramaları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 ayarlanır. - Arayanın adını ayarlamak için
setCallerDisplayName(String, int)
yöntemini kullanınPRESENTATION_ALLOWED
geçişi geçiliyor içinint
parametresi gibi sabit değer gösterilebilir. - Giden aramanın uygun video durumuna sahip olduğundan emin olmak için
setVideoState(int)
yöntemini kullanarakConnection
nesnesini sorgulayın vegetVideoState()
yöntemiConnectionRequest
nesne.
- Uygulamanız, bağımsız değişken olarak
onCreateOutgoingConnectionFailed(PhoneAccountHandle, ConnectionRequest)
Uygulamanız
placeCall(Uri, Bundle)
yöntemini çağırdığında ve giden çağrı şuna bağlanamadığında telekomünikasyon alt sistemi bu yöntemi çağırır: yerleştirilmelidir. Bu duruma yanıt olarak uygulamanız, kullanıcıyı ( Örneğin, bir uyarı kutusu veya kısa mesaj yer alır. Sürekli devam ederse uygulamanız arama yapamayabilir yoksa başka bir uygulamada devam eden bir çağrı olduğunda arama yapmadan önce beklemeye al.onCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest)
Uygulamanız
addNewIncomingCall(PhoneAccountHandle, Bundle)
yöntemini çağırdığında telekomünikasyon alt sistemi bu yöntemi çağırır (uygulamanızda gelen yeni bir aramayı sisteme bildirmek için) Uygulamanız,Connection
uygulamanızın yeni örneği ( daha fazla bilgi için Bağlantıyı uygulama bölümünü inceleyin) yeni gelen aramayı temsil eder. Gelen e-postaları bağlantısını kurmak için aşağıdaki işlemleri gerçekleştirin:- Uygulamanız, bağımsız değişken olarak
PROPERTY_SELF_MANAGED
sabitini kullanaraksetConnectionProperties(int)
yöntemini çağırmalıdır ifadesini ekleyin. - Uygulamanız aramaları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 ayarlanır. - Arayanın adını ayarlamak için
setCallerDisplayName(String, int)
yöntemini kullanınPRESENTATION_ALLOWED
geçişi geçiliyor içinint
parametresi gibi sabit değer gösterilebilir. - Gelen çağrının telefon numarasını veya adresini belirtmek için
Connection
nesnesininsetAddress(Uri, int)
yöntemi. - Giden aramanın uygun video durumuna sahip olduğundan emin olmak için
setVideoState(int)
yöntemini kullanarakConnection
nesnesini sorgulayın vegetVideoState()
yöntemiConnectionRequest
nesne.
- Uygulamanız, bağımsız değişken olarak
onCreateIncomingConnectionFailed(PhoneAccountHandle, ConnectionRequest)
Uygulamanız Telekom'a şu konuda bilgi vermek için
addNewIncomingCall(PhoneAccountHandle, Bundle)
yöntemini çağırdığında, telekomünikasyon alt sistemi bu yöntemi çağırır: yeni bir gelen çağrı, ancak gelen çağrıya izin verilmiyor (daha fazla çağrı kısıtlamaları bölümüne bakın). Uygulamanız gelen aramayı sessizce reddeder, isteğe bağlı olarak bir bildirim göndererek cevapsız çağrının kullanıcısıdır.
Bağlantıyı uygulayın
Uygulamanız aşağıdakileri yapmak için Connection
alt sınıfı oluşturmalıdır:
temsil eder. Aşağıdaki yöntemleri
uygulamanız:
onShowIncomingCallUi()
Yeni bir gelen çağrı eklediğinizde ve yeni bir gelen çağrı eklediğinizde telekomünikasyon alt sistemi bu yöntemi çağırır. uygulamanız gelen arama kullanıcı arayüzünü göstermelidir.
onCallAudioStateChanged(CallAudioState)
Telekom alt sistemi, uygulamanıza mevcut sesin rota veya mod değişti. Bu, uygulamanızın ses modu için
setAudioRoute(int)
yöntemidir. Bu yöntem, sistem ses rotasını değiştirirse de çağrılabilir (örneğin, Bluetooth mikrofonlu kulaklık bağlantısı kesildiğinde).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 aramayı beklemeli ve ardından Sisteme bilgi vermek için
setOnHold()
yöntemi olduğundan emin olun. Telekom alt sistemi aşağıdaki durumlarda bu yöntemi çağırabilir: gösteren bir çağrı hizmeti (ör. Android Auto) aramayı beklemeye almaya yönelik bir kullanıcı isteği iletmelidir. Telekom alt sistemi ayrıca bu yöntem, kullanıcı başka bir uygulamada etkin bir çağrı yaparsa. Daha fazla çağrı içi hizmetler hakkında bilgi içinInCallService
sayfasına bakın.onUnhold()
Aşağıdaki durumlarda telekomünikasyon alt sistemi bu yöntemi çağırır: beklemeye alınan bir aramayı devam ettirmek istiyor. Uygulamanız devam ettirildiğinde çağırırsa
setActive()
yöntemini çağırır. yöntemini çağırın. Telekomünikasyon bir çağrı içi hizmet (ör. Android Auto, aramayı gösteren bir çağrıyı devam ettirmek için istek aktarmak istiyor. Örneğin, Arama içi hizmetler hakkında daha fazla bilgiyiInCallService
adresinde bulabilirsiniz.onAnswer()
Telekomünikasyon alt sistemi, bir e-posta göndererek uygulamanız gerektiğini de vurgulayabilirsiniz. Uygulamanız yanıt verdiğinde çağırırsa
setActive()
yöntemini çağırır. yöntemini kullanın. Telekomünikasyon uygulamanız yeni bir gelen çağrı eklediğinde ve alt sistem bu yöntemi çağırabilir. başka bir uygulamada beklemeye alınamayan devam eden bir arama var. Telekom alt sistemi, gelen arama kullanıcı arayüzünü uygulamanız adına şurada gösterir: bahsedeceğiz. Çerçeve, aşırı yüklenmiş bir yöntem sunar. destek simgesine dokunun. Daha fazla için bkz.onAnswer(int)
.onReject()
Telekom alt sistemi, gelen bir iletiyi reddetmek istediğinde bu yöntemi çağırır. çağrısına bir tıklama URL'si eklemeniz gerekir. Uygulamanız çağrıyı reddettikten sonra,
setDisconnected(DisconnectCause)
öğesini çağırmalı ve parametre olarakREJECTED
değerini belirtmelidir. Uygulamanız ardındandestroy()
yöntemini çağırarak uygulamanın aramayı işlediği sistem. Telekom alt sisteminin bu yöntem kullanıcı, uygulamanızdan gelen bir aramayı reddettiğinde kullanılabilir.onDisconnect()
Telekom alt sistemi bir aramanın bağlantısını kesmek istediğinde bu yöntemi çağırır. Çağrı sona erdiğinde, uygulamanız
setDisconnected(DisconnectCause)
yöntemini çağırmalı ve parametre olarakLOCAL
değerini belirterek kullanıcı isteği, aramanın bağlantısının kesilmesine neden oldu. Ardından uygulamanız Telekomünikasyona bilgi vermek içindestroy()
yöntem çağrıyı işlediği alt sistemdir. Sistem bu yöntemi çağırabilir Kullanıcı, başka bir görüşme içi hizmet (ör. Android Auto. Sistem, çağrınızın şöyle olması gerektiğinde de bu yöntemi çağırır: ve diğer çağrının yapılabilmesi için bağlantı kesildi (örneğin, kullanıcı isterse kullanıcı acil durum araması yapın. Görüşme içi hizmetler hakkında daha fazla bilgi edinmek için bkz.InCallService
Sık karşılaşılan arama senaryolarını yönetme
Çağrınızda ConnectionService
API'den yararlanma
android.telecom
sınıfındaki diğer sınıflarla etkileşimde bulunur.
paketinden yararlanın. Aşağıdaki bölümlerde, sık karşılaşılan arama senaryoları ve bu senaryoları
bunları işlemek için API'leri kullanmalıdır.
Gelen sesli aramaları yanıtlama
Gelen aramaları işleme akışı, diğer uygulamalarda arama olup olmadığına bakılmaksızın değişir. hakkında bilgi edindiniz. Akışlardaki farkın nedeni, telekomünikasyon çerçevesinin diğer uygulamalarda etkin çağrılar olduğunda cihazdaki tüm arama uygulamaları için kararlı bir ortam sağlandığından emin olun. Daha fazla Arama kısıtlamaları bölümüne bakın.
Diğer uygulamalarda etkin arama yok
Diğer uygulamalarda etkin arama yokken gelen aramaları yanıtlamak için aşağıdaki adımları uygulayın: şu adımları uygulayın:
- Uygulamanız her zamanki mekanizmalarını kullanarak yeni bir gelen arama alır.
addNewIncomingCall(PhoneAccountHandle, Bundle)
yöntemini kullanarak telekom alt sistemini yeni gelen çağrı hakkında bilgilendirir.- Telekom alt sistemi, uygulamanızın
ConnectionService
uygulamasına bağlanır ve yeni bir örnek ister yeni gelen trafiği temsil edenConnection
sınıfının çağrısı içinonCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest)
yöntemini kullanın. - Telekom alt sistemi, uygulamanıza gelen aramayı göstermesi gerektiğini bildirir
kullanıcı arayüzü için
onShowIncomingCallUi()
yöntemini kullanın. - Uygulamanız, ilişkilendirilmiş bir bildirim kullanarak gelen kullanıcı arayüzünü gösterir.
tam ekran intent. Daha fazla bilgiyi
onShowIncomingCallUi()
sayfasında bulabilirsiniz. - Kullanıcı şu durumda
setActive()
yöntemini çağırın: gelen çağrıyı kabul eder veyasetDisconnected(DisconnectCause)
, parametre olarakREJECTED
değerini ve ardından gelen bir kullanıcı,destroy()
yöntemini çağırırsa gelen aramayı reddeder.
Diğer uygulamalarda beklemeye alınamayan etkin aramalar
Diğer uygulamalarda şunu yapamayan etkin aramalar olduğunda gelen aramaları cevaplamak için: beklemeye alınırsa şu adımları uygulayın:
- Uygulamanız her zamanki mekanizmalarını kullanarak yeni bir gelen arama alır.
addNewIncomingCall(PhoneAccountHandle, Bundle)
yöntemini kullanarak telekom alt sistemini yeni gelen çağrı hakkında bilgilendirir.- Telekom alt sistemi, uygulamanızın
ConnectionService
uygulamasına bağlanır ve yeni bir örnek ister yenisini temsil edenConnection
nesnesininonCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest)
yöntemini kullanarak gelen çağrı. - Telekom alt sistemi, gelen çağrınız için gelen arama 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ünikasyona bildirmek içinsetActive()
yöntemini çağırmalısınız çağrının bağlı olduğu alt sistemdir. - Kullanıcı çağrıyı reddederse telekom alt sistemi
onReject()
yöntemini çağırır.REJECTED
parametresini parametre olarak belirtensetDisconnected(DisconnectCause)
yöntemini ve ardından,destroy()
yöntemine çağrı gönderir.
Giden arama yapma
Giden bir arama yapma akışı, müşterinin çağrısı, telekomünikasyon çerçevesinin uyguladığı kısıtlamalar nedeniyle gerçekleştirilemiyor. Daha fazla bilgi için Arama kısıtlamaları konusuna bakın.
Giden arama yapmak için aşağıdaki adımları uygulayın:
- Kullanıcı, uygulamanızda giden bir arama başlatır.
placeCall(Uri, Bundle)
yöntemini kullanarak telekom alt sistemini bildirir. Aşağıdakileri alın yöntem parametreleriyle ilgili dikkat edilmesi gereken noktalar:Uri
parametresi, çağrısının yapıldığından emin olun. Normal telefon numaraları içintel:
URI'sini kullanın şema.Bundle
parametresi, istenen bilgileri elde etmenize olanak tanır.EXTRA_PHONE_ACCOUNT_HANDLE
ekstra öğesine uygulamanızınPhoneAccountHandle
nesnesini ekleyerek arama uygulamanızla ilgili daha fazla bilgi edinin. Sizin uygulaması giden her çağrıyaPhoneAccountHandle
nesnesini sağlamalıdır.Bundle
parametresi, giden çağrı,EXTRA_START_CALL_WITH_VIDEO_STATE
ek öğesindeSTATE_BIDIRECTIONAL
değerini belirterek video içerir. Varsayılan olarak, telekomünikasyon alt sisteminin görüntülü görüşmeleri hoparlör.
- Telekom alt sistemi, uygulamanızın
ConnectionService
öğesine bağlanır hakkında bilgi edindiniz. - Uygulamanız giden arama yapamıyorsa telekom alt sistemi sizi
onCreateOutgoingConnectionFailed(PhoneAccountHandle, ConnectionRequest)
yöntemini kullanarak Uygulamanıza aramanın şu anda yapılamayacağını bildirir. Uygulamanız kullanıcıya aramanın yapılamadığını bildirmelidir. - Uygulamanız giden çağrıyı yapabiliyorsa telekom alt sistemi
onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest)
yöntemidir. Uygulamanız, giden yeni aramayı temsil etmek içinConnection
sınıfınızın bir örneğini döndürmelidir. Örneğin, bağlantıda ayarlamanız gereken özellikler hakkında daha fazla bilgi Bağlantı hizmetini uygulama başlıklı makaleyi inceleyin. - Giden arama bağlandığında telekom alt sistemini bilgilendirmek için
setActive()
yöntemini çağırın etkin olduğundan emin olun.
Çağrıyı bitirme
Bir aramayı sonlandırmak için aşağıdaki adımları uygulayın:
- Kullanıcı aşağıdaki durumlarda parametre olarak
LOCAL
gönderensetDisconnected(DisconnectCause)
öğesini çağırın: aramayı sonlandırın, veyaREMOTE
numaralı telefonu gönderin parametre olarak kullanır. 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 şirketi
çerçeve, cihazdaki aramaların yönetimi için bazı kısıtlamalar uygular. Örneğin,
Örneğin, kullanıcının uygulama yükleme özelliğini
kullanan iki adet arama uygulaması
kendi kendine yönetilen ConnectionService
API'si, FooTalk ve
BarTalk. Bu durumda, aşağıdaki kısıtlamalar geçerlidir:
API düzeyi 27 veya önceki sürümlerde çalışan cihazlarda yalnızca bir uygulama istediğiniz zaman devam edebilirsiniz. Bu kısıtlama, bir kullanıcının FooTalk uygulaması kullanılarak devam eden bir arama varsa, BarTalk uygulaması yeni bir çağrı.
Hem FooTalk hem de BarTalk, API düzeyi 28 veya üstünde çalıştırılan cihazlarda beyan etmek
CAPABILITY_SUPPORT_HOLD
veCAPABILITY_HOLD
kullanıcı birden fazla devam eden aramayı sürdürebilir ve Uygulamalar arasında geçiş yaparak başka bir aramayı başlatabilir veya yanıtlayabilirsiniz.Kullanıcı normal yönetilen aramalar yapıyorsa (örneğin, yerleşik Telefon veya Çevirici uygulaması) kullanıcı, ve uygulamaları arayın. Bu, kullanıcı eş zamanlı olarak FooTalk veya BarTalk görüşmesinde de bulunamazlar.
Kullanıcı bir arama yaparsa telekomünikasyon alt sistemi acil durum araması.
Uygulamanız, kullanıcı acil durum aramasındayken arama alamaz veya yapamaz.
Uygulamanız yanıt aldığında başka bir arama uygulamasında devam eden bir arama varsa gelen aramayı yanıtlarsanız, gelen çağrıyı yanıtlamak başka uygulama. Uygulamanız normal gelen arama kullanıcı arayüzünü göstermemelidir. Telekomünikasyon çerçevesi, gelen arama kullanıcı arayüzünü görüntüler ve yeni aramayı cevaplayan kullanıcı, devam eden aramalarını sonlandıracak. Bu Kullanıcı bir FooTalk görüşmesindeyse ve BarTalk uygulaması, uyarsa telekomünikasyon çerçevesi kullanıcıya yeni bir cihazın olduğu BarTalk çağrısına cevap veren bir kullanıcı, telefonunu FooTalk araması.