برنامههای 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)
مدیریت تنظیمات تاریخچه تماس یکپارچه
از اندروید ۱۷ (سطح API ۳۷)، کاربران میتوانند تاریخچه تماسهای یکپارچه را برای هر برنامه در تنظیمات سیستم (معمولاً در تنظیمات > حسابهای تماس > گزارشهای تماس یکپارچه یا مستقیماً در برنامه شمارهگیر پیشفرض خود) مشاهده و تغییر دهند. هم برنامههای تماس شخص ثالث و هم برنامههای شمارهگیر میتوانند با این تنظیمات تعامل داشته باشند.
هدایت کاربران به تنظیمات
برای باز کردن تنظیمات تاریخچه تماس یکپارچه، یک فعالیت را با اکشن TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION آغاز کنید:
val intent = Intent(TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION) startActivity(intent)
وقتی کاربر تاریخچه تماس یکپارچه را برای یک برنامه در تنظیمات سیستم غیرفعال میکند، سیستم بلافاصله و برای همیشه تمام ورودیهای گزارش تماس موجود برای آن بسته را از ارائهدهنده گزارش تماس بومی ( CallLog.Calls ) پاک میکند. تماسهای بعدی که توسط آن برنامه آغاز یا دریافت میشوند، در شمارهگیر سیستم ضبط نخواهند شد.
به تغییرات ترجیحات گوش دهید
برای همگام ماندن با زمانی که کاربر سابقه تماس یکپارچه را برای برنامه تماس شما در تنظیمات سیستم یا شمارهگیر فعال یا غیرفعال میکند، یک گیرنده پخش برای هدف پخش TelecomManager.ACTION_VOIP_CALL_LOG_PREFERENCE ( android.telecom.action.VOIP_CALL_LOG_PREFERENCE ) ثبت کنید:
val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action == TelecomManager.ACTION_VOIP_CALL_LOG_PREFERENCE) { // Status of the Unified Call History of the app val isEnabled = intent.getBooleanExtra( TelecomManager.EXTRA_VOIP_CALL_LOG_PREFERENCE_STATUS, true ) } } }
وقتی کاربر این دکمه را میزند، پلتفرم این intent را که حاوی وضعیت بولی بهروزرسانیشده در TelecomManager.EXTRA_VOIP_CALL_LOG_PREFERENCE_STATUS اضافی است، به برنامه شما ارسال میکند. به جای انتظار برای تأیید دورهای CallLog.Calls ، برنامه شما میتواند به این ارسال گوش دهد. وقتی تاریخچه تماس یکپارچه غیرفعال باشد (به عبارت دیگر، روی false تنظیم شده باشد)، برنامه شما میتواند وضعیت داخلی خود را بهروزرسانی کند یا پاکسازیهایی مانند پاک کردن نگاشتهای تماس ذخیرهشده محلی که برای مدیریت تماسهای برگشتی استفاده میشوند را انجام دهد.