Arama uygulaması oluşturma

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ü.


Telefon etme uygulaması örneği Kendi kullanıcı arayüzünü kullanan bir çağrı uygulaması örneği

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:

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:

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çin InCallService 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 bilgiyi InCallService 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 olarak REJECTED değerini belirtmelidir. Uygulamanız ardından destroy() 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 olarak LOCAL 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çin destroy() 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:

  1. Uygulamanız her zamanki mekanizmalarını kullanarak yeni bir gelen arama alır.
  2. addNewIncomingCall(PhoneAccountHandle, Bundle) yöntemini kullanarak telekom alt sistemini yeni gelen çağrı hakkında bilgilendirir.
  3. Telekom alt sistemi, uygulamanızın ConnectionService uygulamasına bağlanır ve yeni bir örnek ister yeni gelen trafiği temsil eden Connection sınıfının çağrısı için onCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest) yöntemini kullanın.
  4. Telekom alt sistemi, uygulamanıza gelen aramayı göstermesi gerektiğini bildirir kullanıcı arayüzü için onShowIncomingCallUi() yöntemini kullanın.
  5. 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.
  6. Kullanıcı şu durumda setActive() yöntemini çağırın: gelen çağrıyı kabul eder veya setDisconnected(DisconnectCause), parametre olarak REJECTED 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:

  1. Uygulamanız her zamanki mekanizmalarını kullanarak yeni bir gelen arama alır.
  2. addNewIncomingCall(PhoneAccountHandle, Bundle) yöntemini kullanarak telekom alt sistemini yeni gelen çağrı hakkında bilgilendirir.
  3. Telekom alt sistemi, uygulamanızın ConnectionService uygulamasına bağlanır ve yeni bir örnek ister yenisini temsil eden Connection nesnesinin onCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest) yöntemini kullanarak gelen çağrı.
  4. Telekom alt sistemi, gelen çağrınız için gelen arama kullanıcı arayüzünü görüntüler.
  5. Kullanıcı çağrıyı kabul ederse telekom alt sistemi onAnswer() yöntemini çağırır. Telekomünikasyona bildirmek için setActive() yöntemini çağırmalısınız çağrının bağlı olduğu alt sistemdir.
  6. Kullanıcı çağrıyı reddederse telekom alt sistemi onReject() yöntemini çağırır. REJECTED parametresini parametre olarak belirten setDisconnected(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:

  1. Kullanıcı, uygulamanızda giden bir arama başlatır.
  2. 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çin tel: URI'sini kullanın şema.
    • Bundle parametresi, istenen bilgileri elde etmenize olanak tanır. EXTRA_PHONE_ACCOUNT_HANDLE ekstra öğesine uygulamanızın PhoneAccountHandle nesnesini ekleyerek arama uygulamanızla ilgili daha fazla bilgi edinin. Sizin uygulaması giden her çağrıya PhoneAccountHandle nesnesini sağlamalıdır.
    • Bundle parametresi, giden çağrı, EXTRA_START_CALL_WITH_VIDEO_STATE ek öğesinde STATE_BIDIRECTIONAL değerini belirterek video içerir. Varsayılan olarak, telekomünikasyon alt sisteminin görüntülü görüşmeleri hoparlör.
  3. Telekom alt sistemi, uygulamanızın ConnectionService öğesine bağlanır hakkında bilgi edindiniz.
  4. 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.
  5. Uygulamanız giden çağrıyı yapabiliyorsa telekom alt sistemi onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest) yöntemidir. Uygulamanız, giden yeni aramayı temsil etmek için Connection 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.
  6. 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:

  1. Kullanıcı aşağıdaki durumlarda parametre olarak LOCAL gönderen setDisconnected(DisconnectCause) öğesini çağırın: aramayı sonlandırın, veya REMOTE numaralı telefonu gönderin parametre olarak kullanır.
  2. 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 ve CAPABILITY_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ı.