Library Core-Telecom
menyederhanakan proses integrasi aplikasi panggilan
Anda dengan platform Android dengan menyediakan kumpulan API
yang andal dan konsisten
Jika ingin mempelajari implementasi praktis, Anda dapat menemukan aplikasi contoh di GitHub:
- Aplikasi Contoh Ringan — Contoh minimal
yang menunjukkan penggunaan
Core-Telecom
API. Ideal untuk memahami konsep dasar dengan cepat. - Aplikasi Contoh Komprehensif (Dibuat oleh Tim Core-Telecom) — Aplikasi yang lebih kaya fitur yang menampilkan praktik terbaik dan fungsi Telekomunikasi lanjutan. Ini adalah resource yang bagus untuk memahami skenario integrasi yang kompleks.
Menyiapkan Core-Telecom
Tambahkan dependensi androidx.core:core-telecom
ke file build.gradle
aplikasi Anda:
dependencies {
implementation ("androidx.core:core-telecom:1.0.0")
}
Deklarasikan izin MANAGE_OWN_CALLS
di AndroidManifest.xml
Anda:
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
Daftarkan aplikasi Anda
Daftarkan aplikasi panggilan Anda ke Android menggunakan CallsManager
untuk mulai menambahkan
panggilan ke sistem. Saat mendaftar, tentukan kemampuan aplikasi Anda (misalnya, dukungan audio, video):
val callsManager = CallsManager(context)
val capabilities: @CallsManager.Companion.Capability Int =
(CallsManager.CAPABILITY_BASELINE or
CallsManager.CAPABILITY_SUPPORTS_VIDEO_CALLING)
callsManager.registerAppWithTelecom(capabilities)
Pengelolaan Panggilan Telepon
Gunakan Core-Telecom API untuk membuat dan mengelola siklus proses panggilan.
Membuat panggilan
Objek CallAttributesCompat
menentukan properti panggilan unik,
yang dapat memiliki karakteristik berikut:
displayName
: nama pemanggil.address
: Alamat panggilan (misalnya, nomor telepon, link rapat).direction
: Masuk atau keluar.callType
: Audio atau video.callCapabilities
: Mendukung transfer dan tahan.
Berikut adalah contoh cara membuat panggilan masuk:
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
)
}
Menambahkan panggilan
Gunakan callsManager.addCall
dengan CallAttributesCompat
dan callback untuk menambahkan
panggilan baru ke sistem dan mengelola update platform jarak jauh. callControlScope
dalam blok addCall
terutama memungkinkan aplikasi Anda melakukan transisi status
panggilan dan menerima update audio:
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.
}
Menjawab telepon
Menjawab panggilan masuk dalam CallControlScope
:
when (val result = answer(CallAttributesCompat.CALL_TYPE_AUDIO_CALL)) {
is CallControlResult.Success -> { /* Call answered */ }
is CallControlResult.Error -> { /* Handle error */ }
}
Menolak panggilan
Tolak panggilan menggunakan disconnect()
dengan DisconnectCause.REJECTED
dalam
CallControlScope
:
disconnect(DisconnectCause(DisconnectCause.REJECTED))
Membuat panggilan keluar aktif
Tetapkan panggilan keluar ke aktif setelah pihak jarak jauh menjawab:
when (val result = setActive()) {
is CallControlResult.Success -> { /* Call active */ }
is CallControlResult.Error -> { /* Handle error */ }
}
Menahan panggilan
Gunakan setInactive()
untuk menahan panggilan:
when (val result = setInactive()) {
is CallControlResult.Success -> { /* Call on hold */ }
is CallControlResult.Error -> { /* Handle error */ }
}
Memutuskan sambungan panggilan
Putuskan sambungan panggilan menggunakan disconnect()
dengan DisconnectCause
:
disconnect(DisconnectCause(DisconnectCause.LOCAL))
Mengelola endpoint audio panggilan
Mengamati dan mengelola endpoint audio menggunakan currentCallEndpoint
,
availableEndpoints
, dan isMuted
Flow
dalam CallControlScope
fun observeAudioStateChanges(callControlScope: CallControlScope) {
with(callControlScope) {
launch { currentCallEndpoint.collect { /* Update UI */ } }
launch { availableEndpoints.collect { /* Update UI */ } }
launch { isMuted.collect { /* Handle mute state */ } }
}
}
Ubah perangkat audio aktif menggunakan requestEndpointChange()
:
coroutineScope.launch {
callControlScope.requestEndpointChange(callEndpoint)
}
Dukungan latar depan
Library ini menggunakan ConnectionService
(Android 13 API level 33 dan yang lebih lama) atau
foregroundtypes (Android 14 API level 34 dan yang lebih tinggi) untuk dukungan
latar depan.
Sebagai bagian dari persyaratan latar depan, aplikasi harus memposting notifikasi agar pengguna mengetahui bahwa aplikasi sedang berjalan di latar depan.
Untuk memastikan aplikasi Anda mendapatkan prioritas eksekusi latar depan, buat notifikasi setelah Anda menambahkan panggilan dengan platform. Prioritas latar depan akan dihapus saat aplikasi Anda menghentikan panggilan atau notifikasi Anda tidak lagi valid.
Pelajari layanan latar depan lebih lanjut.
Dukungan Surface jarak jauh
Perangkat jarak jauh (smartwatch, headset Bluetooth, Android Auto) mampu
mengelola panggilan tanpa interaksi langsung dengan ponsel. Aplikasi Anda harus mengimplementasikan
lambda callback (onAnswerCall
, onSetCallDisconnected
, onSetCallActive
,
onSetCallInactive
) yang disediakan ke CallsManager.addCall
untuk menangani tindakan
yang dimulai oleh perangkat ini.
Saat tindakan jarak jauh terjadi, lambda yang sesuai akan dipanggil.
Penyelesaian sinyal lambda yang berhasil bahwa perintah telah diproses. Jika perintah tidak dapat dipatuhi, lambda akan menampilkan pengecualian.
Penerapan yang tepat memastikan kontrol panggilan yang lancar di berbagai perangkat. Uji secara menyeluruh dengan berbagai platform jarak jauh.