کتابخانه Core-Telecom
فرآیند ادغام برنامه تماس شما با پلتفرم اندروید را با ارائه مجموعه ای قوی و سازگار از APIها ساده می کند.
اگر می خواهید پیاده سازی های عملی را کاوش کنید، می توانید نمونه برنامه های کاربردی را در GitHub پیدا کنید:
- برنامه نمونه سبک وزن - یک مثال حداقلی که استفاده از
Core-Telecom
API را نشان می دهد. ایده آل برای درک سریع مفاهیم اساسی. - برنامه نمونه جامع (توسعه یافته توسط تیم Core-Telecom) - یک برنامه کاربردی با ویژگی های غنی تر که عملکردهای پیشرفته مخابراتی و بهترین شیوه ها را به نمایش می گذارد. این یک منبع عالی برای درک سناریوهای یکپارچه سازی پیچیده است.
Core-Telecom را راه اندازی کنید
وابستگی androidx.core:core-telecom
به فایل build.gradle
برنامه خود اضافه کنید:
dependencies {
implementation ("androidx.core:core-telecom:1.0.0")
}
مجوز MANAGE_OWN_CALLS
در AndroidManifest.xml
خود اعلام کنید:
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
اپلیکیشن خود را ثبت کنید
برنامه تماس خود را با استفاده از CallsManager
در Android ثبت کنید تا شروع به افزودن تماس به سیستم کنید. هنگام ثبت نام، قابلیت های برنامه خود را مشخص کنید (به عنوان مثال، پشتیبانی صوتی، تصویری):
val callsManager = CallsManager(context)
val capabilities: @CallsManager.Companion.Capability Int =
(CallsManager.CAPABILITY_BASELINE or
CallsManager.CAPABILITY_SUPPORTS_VIDEO_CALLING)
callsManager.registerAppWithTelecom(capabilities)
مدیریت تماس
از Core-Telecom API برای ایجاد و مدیریت چرخه عمر تماس استفاده کنید.
تماس ایجاد کنید
شی CallAttributesCompat
ویژگی های یک فراخوانی منحصر به فرد را تعریف می کند که می تواند ویژگی های زیر را داشته باشد:
-
displayName
: نام تماس گیرنده. -
address
: آدرس تماس (به عنوان مثال، شماره تلفن، پیوند جلسه). -
direction
: ورودی یا خروجی. -
callType
: صوتی یا تصویری. -
callCapabilities
: از انتقال و نگه داشتن پشتیبانی می کند.
در اینجا مثالی از نحوه ایجاد تماس ورودی آورده شده است:
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
)
}
تماس اضافه کنید
از callsManager.addCall
با CallAttributesCompat
و callbacks برای افزودن تماس جدید به سیستم و مدیریت بهروزرسانیهای سطح راه دور استفاده کنید. callControlScope
در بلوک addCall
در درجه اول به برنامه شما اجازه میدهد تا وضعیت تماس را تغییر دهد و بهروزرسانیهای صوتی را دریافت کند:
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.
}
یک تماس را پاسخ دهید
به تماس ورودی در CallControlScope
پاسخ دهید:
when (val result = answer(CallAttributesCompat.CALL_TYPE_AUDIO_CALL)) {
is CallControlResult.Success -> { /* Call answered */ }
is CallControlResult.Error -> { /* Handle error */ }
}
رد تماس
رد تماس با استفاده از disconnect()
با DisconnectCause.REJECTED
در CallControlScope
:
disconnect(DisconnectCause(DisconnectCause.REJECTED))
تماس خروجی را فعال کنید
هنگامی که طرف راه دور پاسخ داد، یک تماس خروجی را فعال کنید:
when (val result = setActive()) {
is CallControlResult.Success -> { /* Call active */ }
is CallControlResult.Error -> { /* Handle error */ }
}
تماس را در حالت انتظار قرار دهید
از setInactive()
برای قرار دادن تماس در حالت انتظار استفاده کنید:
when (val result = setInactive()) {
is CallControlResult.Success -> { /* Call on hold */ }
is CallControlResult.Error -> { /* Handle error */ }
}
تماس را قطع کنید
قطع تماس با استفاده از disconnect()
با DisconnectCause
:
disconnect(DisconnectCause(DisconnectCause.LOCAL))
نقاط پایانی صوتی تماس را مدیریت کنید
مشاهده و مدیریت نقاط انتهایی صوتی با استفاده از currentCallEndpoint
، availableEndpoints
، و isMuted
Flow
در CallControlScope
fun observeAudioStateChanges(callControlScope: CallControlScope) {
with(callControlScope) {
launch { currentCallEndpoint.collect { /* Update UI */ } }
launch { availableEndpoints.collect { /* Update UI */ } }
launch { isMuted.collect { /* Handle mute state */ } }
}
}
دستگاه صوتی فعال را با استفاده از requestEndpointChange()
تغییر دهید:
coroutineScope.launch {
callControlScope.requestEndpointChange(callEndpoint)
}
پشتیبانی پیش زمینه
این کتابخانه از ConnectionService
(Android 13 API سطح 33 و پایین تر) یا پیش زمینه (Android 14 API سطح 34 و بالاتر) برای پشتیبانی پیش زمینه استفاده می کند.
به عنوان بخشی از الزامات پیش زمینه، برنامه باید یک اعلان ارسال کند تا کاربران بدانند که برنامه در پیش زمینه در حال اجرا است.
برای اطمینان از اینکه برنامه شما اولویت اجرای پیش زمینه را دارد، پس از افزودن تماس با پلتفرم، یک اعلان ایجاد کنید. وقتی برنامه شما تماس را قطع می کند یا اعلان شما دیگر معتبر نیست، اولویت پیش زمینه حذف می شود.
درباره خدمات پیش زمینه بیشتر بیاموزید .
پشتیبانی از Remote Surface
دستگاه های راه دور (ساعت های هوشمند، هدست های بلوتوث، Android Auto) قادر به مدیریت تماس بدون تعامل مستقیم با تلفن هستند. برنامه شما باید لامبداهای پاسخ به تماس ( onAnswerCall
، onSetCallDisconnected
، onSetCallActive
، onSetCallInactive
) ارائه شده به CallsManager.addCall
را برای مدیریت اقدامات آغاز شده توسط این دستگاهها اجرا کند.
هنگامی که یک عمل از راه دور رخ می دهد، لامبدا مربوطه فراخوانی می شود.
تکمیل موفقیت آمیز لامبدا نشان می دهد که دستور پردازش شده است. اگر فرمان را نمی توان اطاعت کرد، لامبدا باید یک استثنا ایجاد کند.
اجرای صحیح کنترل تماس بدون درز را در دستگاه های مختلف تضمین می کند. به طور کامل با سطوح مختلف از راه دور تست کنید.