Android 9 «میاناهای برنامهسازی کاربردی» (API) را برای پشتیبانی بهتر از برنامههای تماس طرف سوم ارائه میدهد. برنامههای تماس شخص ثالث معمولاً برای همزیستی با تماسهای تلفنی شرکت مخابراتی به «میاناهای برنامهسازی کاربردی تلفنی» مانند PHONE_STATE
پخش تکیه میکنند. درنتیجه،
برنامههای برقراری تماس شخص ثالث باید تماسهای شرکت مخابراتی را در اولویت قرار دهند و اغلب به
رد کردن بیصدای تماسهای ورودی در برنامه یا پایان دادن به تماس درحال انجام برای
باز کردن راه برای تماس شرکت مخابراتی متوسل میشوند.
میاناهای برنامهسازی کاربردی در Android 9 از سناریوهای تماس همزمان بین برنامههای طرف سوم و تماسهای شرکت مخابراتی پشتیبانی میکنند. این کار امکان دریافت تماس ورودی شخص ثالث را درحین تماس با شرکت مخابراتی فراهم میکند. این چارچوب مسئولیت تضمین برقراری تماس شرکت مخابراتی را زمانی که کاربر در تماس طرف سوم شرکت میکند برعهده میگیرد.
در Android 9، برنامههای تماس شخص ثالث تشویق میشوند تا کلاس
ConnectionService خودمدیریتشده را پیادهسازی کنند. برای کسب اطلاعات بیشتر درباره نحوه ساختن برنامه
تماس بااستفاده از این کلاس، ساختن برنامه تماس بااستفاده از کتابخانه
Core-Telecom را ببینید.
کلاس خودمدیریتی ConnectionService همچنین به توسعهدهندگان این فرصت را میدهد که برای ثبت تماسهای برنامهشان در گزارش تماس سیستم موافقت کنند (EXTRA_LOG_SELF_MANAGED_CALLS را ببینید). طبق الزامات سند تعریف سازگاری Android (CDD) (بخش ۷.۴.۱.۲)، باید مطمئن شوید که برنامه تلفن یا شمارهگیر شما این ورودیهای گزارش تماس را نمایش میدهد و نام برنامه تماس شخص ثالثی را که تماس از آنجا شروع شده است نشان میدهد (برای نمونهای از نحوه برآورده کردن این الزام توسط برنامه شمارهگیر AOSP، ورودیهای گزارش تماس از برنامههای تماس شخص ثالث را ببینید).
برنامهها مسئول تنظیم CAPABILITY_SUPPORT_HOLD و
CAPABILITY_HOLD در اتصالات برنامههایشان هستند. بااینحال، ممکن است در برخی شرایط برنامه نتواند تماس را درانتظار بگذارد. این چارچوب شامل مقرراتی برای حلوفصل این نوع پروندهها است.
وضعیتها
باید برنامه شمارهگیر را تغییر دهید تا از عهده سناریوهای زیر برآید.
مدیریت تماسهای ورودی که باعث قطع شدن تماس درحال انجام میشوند
در سناریویی که یک تماس شخص ثالث درحال انجام است (مثلاً در تماس SuperCaller) که از انتظار پشتیبانی نمیکند و کاربر یک تماس تلفن همراه دریافت میکند (مثلاً بااستفاده از شرکت مخابراتی FooCom)، برنامه «شمارهگیر» یا «تلفن» شما باید به کاربر نشان دهد که پاسخ دادن به تماس شبکه تلفن همراه، تماس شخص ثالث درحال انجام را پایان خواهد داد.
این تجربه کاربری مهم است زیرا برنامه تماس شخص ثالث ممکن است تماس درحال انجام داشته باشد که چارچوب نمیتواند آن را در حالت انتظار قرار دهد. پاسخ دادن به تماس تلفن همراه جدید باعث قطع شدن تماس شخص ثالث درحال انجام میشود.
برای مثال، میانای کاربر را در شکل ببینید:
شکل ۱. تماس ورودی درحال قطع کردن تماس طرف سوم درحال انجام است.
برنامه شمارهگیر شما میتواند با بررسی کردن موارد اضافی تماس، بررسی کند که آیا تماس ورودی باعث قطع شدن تماس دیگری میشود یا نه. مطمئن شوید که
EXTRA_ANSWERING_DROPS_FG_CALL روی TRUE تنظیم شده باشد، و
EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME روی نام برنامهای تنظیم شده باشد
که تماس آن هنگام پاسخ دادن به تماس ورودی تلفن همراه قطع میشود.
ورودیهای گزارش تماس از برنامههای تماس شخص ثالث
توسعهدهندگان برنامههای تماس شخص ثالث میتوانند موافقت کنند که تماسهای موجود در برنامهشان در گزارش تماس سیستم ثبت شود (EXTRA_LOG_SELF_MANAGED_CALLS را ببینید). این یعنی ممکن است ورودیهایی در گزارش تماس وجود داشته باشد که مربوط به تماسهای شبکه تلفن همراه نباشد.
وقتی برنامه شمارهگیر AOSP ورودیهای گزارش تماس مربوط به برنامه تماس شخص ثالث را نمایش میدهد، نام برنامهای که تماس در آن برقرار شده است در گزارش تماس نمایش داده میشود، همانطور که در شکل نشان داده شده است:
شکل ۲. ورودی گزارش تماس با نام برنامه تماس طرف سوم در برنامه شمارهگیر.
برای تعیین نام برنامهای که با ورودی گزارش تماس مرتبط است، از ستونهای
PHONE_ACCOUNT_COMPONENT_NAME و PHONE_ACCOUNT_ID در
ارائهدهنده گزارش تماس برای ایجاد نمونهای از PhoneAccountHandle استفاده کنید که
منبع ورودی گزارش تماس را شناسایی میکند. برای دریافت جزئیات مربوط به کلاس PhoneAccount،
TelecomManager را پُرسمان کنید. برای تعیین اینکه آیا ورودی گزارش تماس
از برنامه تماس طرف سوم است، PhoneAccountقابلیتهای را بررسی کنید تا ببینید
آیا CAPABILITY_SELF_MANAGED تنظیم شده است یا نه.
روش getLabel در PhoneAccount برگشتی نام برنامه مرتبط با ورودی گزارش تماس از برنامه تماس طرف سوم را برمیگرداند.
کنترلهای یکپارچهسازی گزارش تماس VoIP
از Android 17 (سطح API ۳۷)، برنامههای تماس VoIP شخص ثالث
که با Core-Telecom و CallsManager ادغام میشوند میتوانند سابقه تماس خود را
مستقیماً در گزارش تماس سیستم Android بومی (CallLog.Calls) بنویسند.
برای اطمینان از حفظ حریم خصوصی کاربر و پاکسازی دادهها بهطور یکسان در سراسر بومسازگان Android،
همه دستگاههای دارای Android 17 (سطح میانای برنامهسازی کاربردی ۳۷) و بالاتر که پرچم ویژگی مخابراتی (android.software.telecom) را اعلام میکنند و نقش android.app.role.DIALER را دارند باید از کنترلهای ادغام گزارش تماس VoIP برای هر برنامه مطابق با سند تعریف سازگاری Android (CDD) پشتیبانی کنند.
الزامات پیادهسازی دستگاه
دستگاهها باید صفحه تنظیمات دردسترس کاربر (معمولاً در تنظیمات > حسابهای تماس > گزارشهای تماس یکپارچه) ارائه دهند که به کاربران امکان میدهد یکپارچهسازی گزارش تماس را برای برنامههای VoIP شخص ثالث بهصورت جداگانه مشاهده و فعال/غیرفعال کنند.
برای برآورده کردن این شرط، باید پیشفرض پلاتفرم سهام را ادغام کنید:
- ادغام تنظیمات پلاتفرم: مطمئن شوید دستگاهتان شامل
com.android.phone.settings.PhoneAccountSettingsActivityارائهشده توسط پلاتفرم Android بهصورت پیشفرض (com.android.phone) باشد. - الزامات حلوفصل هدف: دستگاهتان باید هدف
TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION(android.telecom.action.CONFIGURE_CALL_LOG_INTEGRATION) را برای صفحه مدیریت پلاتفرم پیشفرض حلوفصل کند.
وقتی برنامه، پیامواره سیستم، یا پیوند عمیق موارد زیر را فراخوانی میکند، هدف باید
با موفقیت PhoneAccountSettingsActivity را راهاندازی کند و نباید
ActivityNotFoundException را ایجاد کند:
Intent intent = new Intent(TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION);
context.startActivity(intent);
اعتبارسنجی
برای آزمایش اینکه دستگاهتان از برنامههای تماس شخص ثالث پشتیبانی میکند، از برنامه Telecomm
test استفاده کنید که کلاس ConnectionService خودمدیریتشده را پیادهسازی میکند. برنامه در
/packages/services/Telecomm/testapps/ قرار دارد.
برنامه آزمایشی را از ریشه مخزن منبع Android بااستفاده از این دستور بسازید:
mmma packages/services/Telecomm/testapps/apk ساخت را بااستفاده از
adb install -g -r <apk path>نصب کنید. نماد «نمونه» «خودمدیریتشده» به راهانداز اضافه میشود.روی نماد ضربه بزنید تا برنامه آزمایشی باز شود.
مدیریت تماسهای ورودی که باعث قطع شدن تماس درحال انجام میشوند
این مراحل را دنبال کنید تا مطمئن شوید تماس ورودی باعث قطع شدن تماس شخص ثالث درحال انجام میشود.
شکل ۳. برنامه آزمایشی با پیادهسازیهای نمونه از کلاس ConnectionService.
- گزینه نگهداشتنی را پاک کنید.
- برای شروع تماس خروجی نمونه جدید، روی خروجی تکضرب بزنید.
- روی دکمه فعال تکضرب بزنید تا تماس فعال شود.
- با تلفن دیگری با شماره تلفن دستگاه تحت آزمایش تماس بگیرید. این سناریویی را فراخوانی میکند که در آن نام برنامهای به شمارهگیر شما ارائه میشود، که تماس آن قطع خواهد شد.
- وقتی کارتان تمام شد، روی دکمه قطع اتصال در برنامه آزمایشی تکضرب بزنید.
ورودیهای گزارش تماس از برنامههای تماس طرف سوم
پساز تکمیل مراحل بالا، برنامه آزمایشی باید تماسی را در گزارش تماس سیستم ثبت کرده باشد. برای تأیید اینکه دستگاه تماسهای برنامههای تماس شخص ثالث را ثبت میکند، برنامه شمارهگیر را باز کنید و تأیید کنید که تماس در گزارش تماس سیستم نشان داده میشود.
کنترلهای یکپارچهسازی گزارش تماس VoIP
برای تأیید رعایت الزام هدف یکپارچهسازی گزارش تماس VoIP در
Android 17 و بالاتر، آزمون CtsTelecomTestCases Compatibility Test Suite
(CTS) را اجرا کنید. این آزمایش درستیسنجی میکند که ارسال
TelecomManager#ACTION_CONFIGURE_CALL_LOG_INTEGRATION
(android.telecom.action.CONFIGURE_CALL_LOG_INTEGRATION) در مرزهای بسته در دستگاه
به یک گرداننده فعالیت صادرشده معتبر (بررسی resolveActivity) حلوفصل میشود.