Varsayılan telefon uygulaması, Android Telecom çerçevesinin bir Android cihazdaki varsayılan telefon uygulamasının yerine geçecek bir hizmet oluşturmak için rol yöneticisi ve çağrı içi hizmeti kullanarak InCallService API'yi kullanarak uygulamanızı çağrı durumu konusunda bilgilendirmesini sağlar. Uygulamanız aşağıdaki şartları karşılamalıdır:
Arama özelliği olmamalı ve yalnızca arama için kullanılan kullanıcı arayüzünden oluşmalıdır. Telekomünikasyon çerçevesinin farkında olduğu tüm çağrıları ele almalı, çağrıların mahiyeti hakkında herhangi bir varsayımda bulunmamalıdır. Örneğin, çağrıların SIM tabanlı telefon çağrıları olduğunu varsaymamalı veya herhangi bir ConnectionService'e dayalı arama kısıtlamaları (video görüşmeleri için telefon kısıtlamalarının uygulanması gibi) uygulamamalıdır.
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ı şu an için çağrı yapamadığı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 bazı ipuçları vereceğim. - 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 işlemini destekleyen
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 çağrı yürütebilir. Uygulamalar arasında geçiş yaparak başka bir aramayı başlatabilir ya da 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österir ve yeni aramayı yanıtlayan kullanıcının, devam eden aramaları sona erecek olması gerekir. 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ı.
Varsayılan Telefon Uygulaması Olma
Varsayılan numara çevirici/telefon uygulaması, cihaz açıkken görüşme içi kullanıcı arayüzünü sağlayan uygulamadır.
karar verebilir. Ayrıca kullanıcıya arama başlatma ve arama geçmişini görme imkanı sunar.
cihazlarında test edebilirsiniz. Bir cihaz, sistem tarafından sağlanan bir varsayılan numara çevirici/telefon uygulamasıyla birlikte gelir. Kullanıcı
bu rolü tek bir uygulama üzerinden devralabilir. Bir uygulama
rolü yerine getirmek için RoleManager
RoleManager.ROLE_DIALER
rol.
Varsayılan telefon uygulaması, cihaz arama sırasında bir kullanıcı arayüzü sağlar. Cihaz
araç modunda değil (UiModeManager#getCurrentModeType()
değil)
Configuration.UI_MODE_TYPE_CAR
) tıklayın.
RoleManager.ROLE_DIALER
rolünün doldurulması için uygulamanın
gereklilik sayısı:
Intent#ACTION_DIAL
amacını işlemesi gerekir. Bu, uygulamanın kullanıcının giden aramaları başlatması için bir tuş takımı kullanıcı arayüzü.InCallService
API'yi tam olarak uygulamalı ve hem gelen çağrıyı hem de kullanıcı arayüzü ve devam eden çağrı kullanıcı arayüzü.
Not: RoleManager.ROLE_DIALER
öğesini dolduran uygulama
null
InCallService
, Telekom çerçevesi otomatik olarak düşer
cihaza önceden yüklenmiş olarak gelen numara çevirici uygulamasına geri dönün. Sistem, şu adrese bir bildirim gösterir:
kullanıcıya, aramalarının önceden yüklenmiş numara çevirici uygulaması ile devam ettiğini bildirmesi gerekir. Sizin
uygulama hiçbir zaman null
bağlaması döndürmemelidir; yani böyle bir durumda
RoleManager.ROLE_DIALER
gereksinimleri.
Not: Uygulamanız RoleManager.ROLE_DIALER
dolduruyor ve şu saatte değişiklik yapıyorsa:
bu rolün gerekliliklerini yerine getirememesine
neden olabilir.
RoleManager
, uygulamanızı rolden otomatik olarak kaldıracak ve kapatacak
en iyi şekilde yararlanabilirsiniz. Örneğin,
PackageManager.setComponentEnabledSetting(ComponentName, int, int)
-
uygulamanızın manifest dosyasında beyan ettiği InCallService
öğesini, uygulamanızda programatik olarak devre dışı bırakın
artık proje yöneticisinin beklentileri ne kadar
RoleManager.ROLE_DIALER
.
Önceden yüklenmiş numara çevirici, aşağıdaki durumlarda bile kullanıcı bir acil durum araması yaptığında HER ZAMAN kullanılır.
Uygulama RoleManager.ROLE_DIALER
rolünü doldurduğunda. En uygun
acil durum araması yaptığınızda varsayılan numara çevirici HER ZAMAN
Arama yapmak için TelecomManager.placeCall(Uri, Bundle)
(şunlar dahil:
acil durum aramaları) ekleyebilirsiniz. Bu, platformun, isteğin geldiğini doğrulayabilmesini sağlar.
otomatik olarak ayarlanır. Önceden yüklenmemiş bir numara çevirici uygulaması birIntent#ACTION_CALL
acil durum araması, Intent#ACTION_DIAL
kullanılarak önceden yüklenmiş numara çevirici uygulamasına yükseltilecek
(Onay için; bu optimum olmayan bir kullanıcı deneyimidir.
Aşağıda, InCallService
için manifest kaydı örneği verilmiştir. Meta veriler
TelecomManager#METADATA_IN_CALL_SERVICE_UI
, bu belirli
InCallService
uygulamasının uygulanması, yerleşik görüşme içi kullanıcı arayüzünün yerini almayı amaçlamaktadır.
TelecomManager#METADATA_IN_CALL_SERVICE_RINGING
meta verileri, bunun
InCallService
gelen aramalarda zil sesini çalacak. Görüntüleyin
aşağıya bakın
Kullanıcı arayüzü ve uygulamanızda zil sesi çalınıyor.
<service android:name="your.package.YourInCallServiceImplementation"
android:permission="android.permission.BIND_INCALL_SERVICE"
android:exported="true">
<meta-data android:name="android.telecom.IN_CALL_SERVICE_UI" android:value="true" />
<meta-data android:name="android.telecom.IN_CALL_SERVICE_RINGING"
android:value="true" />
<intent-filter>
<action android:name="android.telecom.InCallService"/>
</intent-filter>
</service>
Not: InCallService
özelliğini şu özellikle İŞARETLEMEMELİSİNİZ.
android:exported="false"
; bunu yapmak, uygulamanıza bağlanamaz
dikkatinizi çekebilir.
InCallService
API'yi uygulamanın yanı sıra aşağıdakileri de beyan etmeniz gerekir:
Intent#ACTION_DIAL
amacını işleyen manifest dosyanız. Aşağıdaki örnekte,
nasıl yapılır?
<activity android:name="your.package.YourDialerActivity"
android:label="@string/yourDialerActivityLabel">
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
</activity>
Bir kullanıcı uygulamanızı yüklediğinde ve ilk kez çalıştırdığında
RoleManager
: Kullanıcılardan uygulamanızın bunları isteyip istemediklerini
telefon uygulamanız olacak.
Aşağıdaki kod, uygulamanızın varsayılan telefon/arama uygulaması olmak için nasıl istekte bulunabileceğini gösterir:
private static final int REQUEST_ID = 1;
public void requestRole() {
RoleManager roleManager = (RoleManager) getSystemService(ROLE_SERVICE);
Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_DIALER);
startActivityForResult(intent, REQUEST_ID);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_ID) {
if (resultCode == android.app.Activity.RESULT_OK) {
// Your app is now the default dialer app
} else {
// Your app is not the default dialer app
}
}
}
Giyilebilir Cihazlar için InCallService erişimi
-
Uygulamanız bir üçüncü taraf tamamlayıcı uygulamasıysa ve InCallService API'lerine erişmek istiyorsa
yapabilecekleri şunlardır:
- Manifest'inizde MANAGE_ONGOING_CALLS izni beyan edin
- Şunu kullanarak fiziksel bir giyilebilir cihazla ilişkilendirin:
Tamamlayıcı uygulama olarak
CompanionDeviceManager
API. Bkz.: https://developer.android.com/guide/topics/connectivity/tamamlayıcı-device-pairing - Bu InCallService'i BIND_INCALL_SERVICE izniyle uygulayın
Gelen Arama Bildirimi Gösteriliyor
UygulamanızInCallService#onCallAdded(Call)
üzerinden yeni bir arama aldığında
gelen çağrı için gelen arama kullanıcı arayüzünü görüntülemekten sorumludur. Bu işlemi,
NotificationManager
API'leri kullanarak yeni bir gelen arama bildirimi yayınlayın.
Uygulamanızın meta verileri tanımladığı durumlarda TelecomManager#METADATA_IN_CALL_SERVICE_RINGING
gelen aramalarda zil sesini çalmaktan sorumludur. Uygulamanız,
İstenen zil sesini belirten NotificationChannel
. Örnek:
NotificationChannel channel = new NotificationChannel(YOUR_CHANNEL_ID, "Incoming Calls",
NotificationManager.IMPORTANCE_MAX);
// other channel setup stuff goes here.
// We'll use the default system ringtone for our incoming call notification channel. You can
// use your own audio resource here.
Uri ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
channel.setSound(ringtoneUri, new AudioAttributes.Builder()
// Setting the AudioAttributes is important as it identifies the purpose of your
// notification sound.
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build());
NotificationManager mgr = getSystemService(NotificationManager.class);
mgr.createNotificationChannel(channel);
Uygulamanız yeni bir gelen arama aldığında, yeni gelen arama için bir Notification
gelen çağrıyı, gelen çağrı bildirim kanalınızla ilişkilendirir. Hedeflerinize göre bir
Bildirimde, tam ekranınızı başlatacak PendingIntent
kullanıcı arayüzü. Bildirim yöneticisi çerçevesi, bildiriminizi
Kullanıcı, telefonu aktif olarak kullanıyorsa uyarı bildirimi. Kullanıcı
bunun yerine tam ekran gelen arama kullanıcı arayüzünüz kullanılır.
Örnek:
// Create an intent which triggers your fullscreen incoming call user interface.
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClass(context, YourIncomingCallActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intent, PendingIntent.FLAG_MUTABLE_UNAUDITED);
// Build the notification as an ongoing high priority item; this ensures it will show as
// a heads up notification which slides down over top of the current content.
final Notification.Builder builder = new Notification.Builder(context);
builder.setOngoing(true);
builder.setPriority(Notification.PRIORITY_HIGH);
// Set notification content intent to take user to the fullscreen UI if user taps on the
// notification body.
builder.setContentIntent(pendingIntent);
// Set full screen intent to trigger display of the fullscreen UI when the notification
// manager deems it appropriate.
builder.setFullScreenIntent(pendingIntent, true);
// Setup notification content.
builder.setSmallIcon( yourIconResourceId );
builder.setContentTitle("Your notification title");
builder.setContentText("Your notification content.");
// Use builder.addAction(..) to add buttons to answer or reject the call.
NotificationManager notificationManager = mContext.getSystemService(
NotificationManager.class);
notificationManager.notify(YOUR_CHANNEL_ID, YOUR_TAG, YOUR_ID, builder.build());
```