برنامههای VoIP میتوانند تماسهای خود را در گزارش تماس سیستم ادغام کنند. این به کاربران اجازه میدهد تا تاریخچه تماس VoIP خود را به صورت مرکزی در برنامه شمارهگیر سیستم مشاهده کنند و تماسها را مستقیماً از برنامه شمارهگیر پاسخ دهند. این راهنما تغییرات لازم در برنامههای تماس VoIP و برنامههای شمارهگیر سیستم را شرح میدهد.
تغییرات برنامه تماس
برای ادغام برنامه VoIP خود با گزارش تماس سیستم، این مراحل را دنبال کنید.
فیلتر هدف فراخوانی مجدد را ثبت کنید
اینتنتِ TelecomManager.ACTION_CALL_BACK که توسط سیستم محافظت میشود را ثبت کنید.
پس از ثبت صحیح این فیلتر intent، هر تماسی که برنامه شما با استفاده از CallsManager.addCall یا سایر APIهای مخابراتی مرتبط اضافه میکند، به طور خودکار توسط سیستم ثبت میشود. سیستم از این intent ثبت شده برای ارسال یک callback به برنامه شما استفاده میکند، زمانی که کاربر یک ورودی گزارش تماس VoIP را در شمارهگیر برای بازگشت تماس انتخاب میکند.
<!-- Activity to handle the callback intent from the system dialer --> <activity android:name=".VoipCallActivity" android:exported="true"> <!-- Register callback intent --> <intent-filter> <action android:name="android.telecom.action.CALL_BACK" /> </intent-filter> </activity>
حذف گزارش تماس
پس از ثبت فراخوانی برگشتی، تمام تماسها در شمارهگیر سیستم ثبت میشوند. برای حذف تماسها بر اساس هر تماس، مقدار بولی isLogExcluded را در CallAttributesCompat برابر با true قرار دهید.
CallAttributesCompat( displayName = displayName, address = address, isLogExcluded = excludeCallLogging, // to exclude call from logging direction = if (isIncoming) { CallAttributesCompat.DIRECTION_INCOMING } else { CallAttributesCompat.DIRECTION_OUTGOING }, callType = CallAttributesCompat.CALL_TYPE_AUDIO_CALL, callCapabilities = ( CallAttributesCompat.SUPPORTS_SET_INACTIVE or CallAttributesCompat.SUPPORTS_STREAM or CallAttributesCompat.SUPPORTS_TRANSFER ), )
مدیریت فراخوانیهای برگشتی
فراخوانیهای اضافه شده از طریق CallsManager.addCall از طریق CallControlScope.getCallId یک UUID منحصر به فرد دریافت میکنند.
// check the intent action for CALL_BACK if (intent.action == TelecomManager.ACTION_CALL_BACK) { launchCall( // fetching stored call details for the UUID to initiate callback callDetails = getCallDetails( uuid = intent.getStringExtra(TelecomManager.EXTRA_UUID) ) ) }
تأیید ورودیهای گزارش تماس
گزارش فراخوانی سیستم تعداد محدودی از ورودیها را نگهداری میکند و در نهایت رکوردهای فراخوانی قدیمی را پاک میکند. از آنجا که برنامه، نگاشتی از UUID ها را برای جزئیات فراخوانی جهت مدیریت فراخوانیهای برگشتی ذخیره میکند، باید به صورت دورهای بررسی کند که کدام UUID ها هنوز در گزارش فراخوانی سیستم وجود دارند. اگر UUID دیگر در گزارش سیستم نباشد، کاربر نمیتواند فراخوانی برگشتی را برای آن فراخوانی آغاز کند و برنامه میتواند نگاشت را با خیال راحت از حافظه محلی خود حذف کند. این روش به بهینهسازی ذخیرهسازی کمک میکند.
برای دریافت لیست فعلی UUID های منتسب به برنامه در گزارش سیستم، CallLog.Calls.CONTENT_VOIP_URI استفاده کنید.
تغییرات برنامه شمارهگیر
برای فعال کردن برنامه شمارهگیر جهت نمایش گزارشهای تماس VoIP و شروع تماسهای برگشتی به برنامههای VoIP، این مراحل را دنبال کنید.
نمایش گزارشهای تماس VoIP در برنامه شمارهگیر
به طور پیشفرض، گزارشهای تماس برنامههای VoIP در برنامه شمارهگیر نمایش داده نمیشوند. برای نمایش گزارشهای تماس یکپارچه در برنامه شمارهگیر، موارد زیر را انجام دهید:
در اندروید ۱۶.۱ (سطح API ۳۶.۱)، پارامتر query
include_voip_callsبه ارائه دهنده محتوایCallLog.Callsاضافه کنید تا گزارشهای تماس VoIP نمایش داده شود:CallLog.Calls.CONTENT_URI.buildUpon() .appendQueryParameter("include_voip_calls", "true") .build()
در اندروید ۱۷ (سطح API ۳۷) و بالاتر، از ارائهدهنده محتوای رسمی و کلید پارامتر زیر استفاده کنید:
شروع فراخوانیهای مجدد از برنامه شمارهگیر
برای شروع یک تماس برگشتی از طریق شمارهگیر، از TelecomManager.placeCall استفاده کنید. این پلتفرم از CallLog.Calls._ID منحصر به فرد ورودی گزارش تماس برای راهاندازی برنامه VoIP صحیح استفاده میکند. این راهاندازی شامل یک TelecomManager.ACTION_CALL_BACK intent است که یک اقدام تعریف شده توسط سیستم برای شروع یک تماس برگشتی است. این intent شامل UUID تماس در intent extra TelecomManager.EXTRA_UUID است که به برنامه VoIP اجازه میدهد تا تشخیص دهد کدام تماس خاص فراخوانی میشود.
// Uri generated with unique ID of the call log entry to launch the respective VoIP app for callback val address = ContentUris.withAppendedId(CallLog.Calls.CONTENT_URI, callId) // extra information required to initiate callback val extras = Bundle() telecomManager.placeCall(address, extras)