Core-Telecom
kitaplığı, güçlü ve tutarlı bir API grubu sağlayarak arama uygulamanızı Android platformuyla entegre etme sürecini kolaylaştırır.
Pratik uygulamaları keşfetmek istiyorsanız GitHub'da örnek uygulamalar bulabilirsiniz:
- Hafif Örnek Uygulama:
Core-Telecom
API kullanımının gösterildiği minimal bir örnek. Temel kavramları hızlı bir şekilde anlamak için idealdir. - Kapsamlı Örnek Uygulama (Core-Telecom Ekibi tarafından geliştirilmiştir): Gelişmiş telekom işlevlerini ve en iyi uygulamaları gösteren, daha fazla özellik barındıran bir uygulamadır. Bu, karmaşık entegrasyon senaryolarını anlamanıza yardımcı olacak mükemmel bir kaynaktır.
Core-Telecom'u kurma
androidx.core:core-telecom
bağımlılığını uygulamanızın build.gradle
dosyasına ekleyin:
dependencies {
implementation ("androidx.core:core-telecom:1.0.0")
}
AndroidManifest.xml
dosyanızda MANAGE_OWN_CALLS
iznini beyan edin:
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
Uygulamanızı kaydettirme
Sisteme arama eklemeye başlamak için CallsManager
kullanarak arama uygulamanızı Android'e kaydedin. Kaydolurken uygulamanızın özelliklerini (ör. ses, video desteği) belirtin:
val callsManager = CallsManager(context)
val capabilities: @CallsManager.Companion.Capability Int =
(CallsManager.CAPABILITY_BASELINE or
CallsManager.CAPABILITY_SUPPORTS_VIDEO_CALLING)
callsManager.registerAppWithTelecom(capabilities)
Çağrı Yönetimi
Arama yaşam döngüsü oluşturmak ve yönetmek için Core-Telecom API'lerini kullanın.
Görüşme oluşturma
CallAttributesCompat
nesnesi, aşağıdaki özelliklere sahip olabilecek benzersiz bir aramanın özelliklerini tanımlar:
displayName
: Arayan kişinin adı.address
: Arama adresi (ör. telefon numarası, toplantı bağlantısı).direction
: Gelen veya giden.callType
: Ses veya video.callCapabilities
: Aktarım ve bekletme işlemlerini destekler.
Aşağıda, gelen arama oluşturma örneği verilmiştir:
fun createIncomingCallAttributes(
callerName: String,
callerNumber: String,
isVideoCall: Boolean): CallAttributesCompat {
val addressUri = Uri.parse("YourAppScheme:$callerNumber")
// Define capabilities supported by your call.
val callCapabilities = CallAttributesCompat.CallCapability(
supportsSetInactive = CallAttributesCompat.SUPPORTS_SET_INACTIVE // Call can be made inactive (implies hold)
)
return CallAttributesCompat(
displayName = callerName,
address = addressUri,
direction = CallAttributesCompat.DIRECTION_INCOMING,
callType = if (isVideoCall) CallAttributesCompat.CALL_TYPE_VIDEO_CALL else CallAttributesCompat.CALL_TYPE_AUDIO_CALL,
callCapabilitiesCompat = callCapabilities
)
}
Görüşme ekleme
Sisteme yeni bir çağrı eklemek ve uzak yüzey güncellemelerini yönetmek için CallAttributesCompat
ile callsManager.addCall
ve geri çağırma işlevini kullanın. addCall
bloğu içindeki callControlScope
, öncelikle uygulamanızın arama durumunu değiştirmesine ve ses güncellemeleri almasına olanak tanır:
try {
callsManager.addCall(
INCOMING_CALL_ATTRIBUTES,
onAnswerCall, // Watch needs to know if it can answer the call.
onSetCallDisconnected,
onSetCallActive,
onSetCallInactive
) {
// The call was successfully added once this scope runs.
callControlScope = this
}
}
catch(addCallException: Exception){
// Handle the addCall failure.
}
Çağrı yanıtlama
CallControlScope
içinde gelen aramayı yanıtlama:
when (val result = answer(CallAttributesCompat.CALL_TYPE_AUDIO_CALL)) {
is CallControlResult.Success -> { /* Call answered */ }
is CallControlResult.Error -> { /* Handle error */ }
}
Aramayı reddetme
CallControlScope
içinde DisconnectCause.REJECTED
ile disconnect()
kullanarak aramayı reddetme:
disconnect(DisconnectCause(DisconnectCause.REJECTED))
Giden aramayı etkinleştirme
Uzaktan taraf yanıt verdikten sonra giden aramayı etkin olarak ayarlama:
when (val result = setActive()) {
is CallControlResult.Success -> { /* Call active */ }
is CallControlResult.Error -> { /* Handle error */ }
}
Çağrıyı beklemeye alma
Bir aramayı beklemeye almak için setInactive()
simgesini kullanın:
when (val result = setInactive()) {
is CallControlResult.Success -> { /* Call on hold */ }
is CallControlResult.Error -> { /* Handle error */ }
}
Bir aramanın bağlantısını kesme
disconnect()
ile DisconnectCause
kullanarak bir görüşmenin bağlantısını kesme:
disconnect(DisconnectCause(DisconnectCause.LOCAL))
Arama ses uç noktalarını yönetme
CallControlScope
içinde currentCallEndpoint
, availableEndpoints
ve isMuted
Flow
'ları kullanarak ses uç noktalarını gözlemleyin ve yönetin
fun observeAudioStateChanges(callControlScope: CallControlScope) {
with(callControlScope) {
launch { currentCallEndpoint.collect { /* Update UI */ } }
launch { availableEndpoints.collect { /* Update UI */ } }
launch { isMuted.collect { /* Handle mute state */ } }
}
}
requestEndpointChange()
simgesini kullanarak etkin ses cihazını değiştirin:
coroutineScope.launch {
callControlScope.requestEndpointChange(callEndpoint)
}
Ön plan desteği
Kitaplık, ön plan desteği için ConnectionService
(Android 13 API düzeyi 33 ve önceki sürümler) veya foregroundtypes (Android 14 API düzeyi 34 ve sonraki sürümler) kullanır.
Ön plan şartları kapsamında, uygulamanın ön planda çalıştığının kullanıcılara bildirilmesi için uygulamanın bir bildirim yayınlaması gerekir.
Uygulamanızın ön planda yürütme önceliğine sahip olmasını sağlamak için platformla aramayı ekledikten sonra bir bildirim oluşturun. Uygulamanız aramayı sonlandırdığında veya bildiriminiz artık geçerli olmadığında ön plan önceliği kaldırılır.
Ön plan hizmetleri hakkında daha fazla bilgi edinin.
Uzaktan Surface desteği
Uzaktan cihazlar (akıllı saatler, Bluetooth kulaklıklar, Android Auto), doğrudan telefon etkileşimi olmadan arama yönetimi yapabilir. Uygulamanız, bu cihazlar tarafından başlatılan işlemleri işlemek için CallsManager.addCall
'e sağlanan geri çağırma lambdalarını (onAnswerCall
, onSetCallDisconnected
, onSetCallActive
, onSetCallInactive
) uygulamalıdır.
Uzaktan bir işlem gerçekleştiğinde ilgili lambda çağrılır.
Lambda'nın başarıyla tamamlanması, komutun işlendiğini gösterir. Komuta uyulamıyorsa lambda bir istisna atmalıdır.
Doğru şekilde uygulandığında, farklı cihazlar arasında sorunsuz görüşme kontrolü sağlar. Çeşitli uzaktan kumanda yüzeyleriyle ayrıntılı olarak test edin.