Android 9 API هایی را برای پشتیبانی بهتر از برنامه های تماس شخص ثالث (3P) ارائه می دهد. برنامههای تماس 3P معمولاً به APIهای تلفنی مانند پخش PHONE_STATE
برای همزیستی در کنار تماسهای تلفنی شرکت مخابراتی متکی هستند. در نتیجه، برنامههای تماس 3P باید به تماسهای شرکت مخابراتی اولویت بدهند و اغلب به رد کردن بیصدا تماسهای دریافتی در برنامه متوسل میشوند، یا یک تماس در حال انجام را خاتمه میدهند تا راه را برای تماس شرکت مخابراتی باز کنند.
APIهای اندروید 9 از سناریوهای تماس همزمان بین برنامههای 3P و تماسهای شرکت مخابراتی پشتیبانی میکنند. به عنوان مثال، این امکان را فراهم می کند که یک تماس 3P دریافتی در حالی که درگیر یک تماس شرکت مخابراتی هستید، دریافت کنید. این فریم ورک مسئولیت اطمینان از برقراری تماس شرکت مخابراتی را زمانی که کاربر در تماس 3P قرار میگیرد، بر عهده میگیرد.
در اندروید 9، برنامههای تماس 3P تشویق میشوند تا ConnectionService
API خود مدیریت شده را پیادهسازی کنند. برای اطلاعات بیشتر در مورد نحوه ساخت یک برنامه تماس با استفاده از این API، به ساخت برنامه تماس مراجعه کنید.
API خود مدیریت ConnectionService
همچنین به توسعهدهندگان این فرصت را میدهد تا تماسهایی را که در برنامهشان ثبت شده در گزارش تماسهای سیستمی ثبت شده است، انتخاب کنند (به EXTRA_LOG_SELF_MANAGED_CALLS
مراجعه کنید). مطابق با الزامات سند تعریف سازگاری Android (CDD) (بخش 7.4.1.2)، باید مطمئن شوید که برنامه شماره گیر/تلفن شما این ورودی های گزارش تماس را نمایش می دهد و نام برنامه تماس 3P را نشان می دهد که تماس از آنجا شروع شده است (به عنوان مثال از چگونه برنامه شمارهگیر AOSP این نیاز را برآورده میکند، به ورودیهای گزارش تماس از برنامههای تماس 3P مراجعه کنید.
برنامهها مسئول تنظیم CAPABILITY_SUPPORT_HOLD
و CAPABILITY_HOLD
در اتصالات برنامههای خود هستند. با این حال، ممکن است یک برنامه در برخی شرایط نتواند تماس برقرار کند. این چارچوب شامل مقرراتی برای حل و فصل این نوع موارد است.
سناریوها
شما باید برنامه شماره گیر خود را برای رسیدگی به حالات زیر تغییر دهید.
رسیدگی به تماس های دریافتی که تماس در حال انجام را قطع می کند
در سناریویی که یک تماس 3P در حال انجام وجود دارد (مثلاً در تماس SuperCaller) که از انتظار پشتیبانی نمیکند، و کاربر یک تماس تلفن همراه دریافت میکند (مثلاً از طریق شرکت مخابراتی خود FooCom)، برنامه Dialer/Phone شما باید به کاربر نشان دهد که پاسخ میدهد. تماس شبکه تلفن همراه به تماس 3P ادامه می دهد.
این تجربه کاربری مهم است زیرا یک برنامه تماس 3P ممکن است تماس مداومی داشته باشد که توسط فریمورک قابل نگهداشتن نباشد. پاسخ دادن به تماس تلفن همراه جدید باعث می شود که تماس 3P در حال انجام قطع شود.
برای مثال رابط کاربری زیر را ببینید:
برنامه شماره گیر شما می تواند با بررسی موارد اضافی تماس بررسی کند که آیا تماس ورودی باعث قطع ارتباط تماس دیگری می شود. مطمئن شوید که EXTRA_ANSWERING_DROPS_FG_CALL
روی TRUE
تنظیم شده باشد و EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME
روی نام برنامه ای تنظیم شده است که تماس آن با پاسخ به تماس تلفن همراه ورودی قطع می شود.
ورودی های گزارش تماس از برنامه های تماس 3P
توسعهدهندگان برنامههای تماس 3P میتوانند تماسهایی را که در برنامهشان ثبت شده و در گزارش تماسهای سیستم ثبت شده است، انتخاب کنند (به EXTRA_LOG_SELF_MANAGED_CALLS
مراجعه کنید). این بدان معنی است که ممکن است ورودی هایی در گزارش تماس داشته باشید که برای تماس های شبکه تلفن همراه نیستند.
هنگامی که برنامه شمارهگیر AOSP ورودیهای گزارش تماس مربوط به یک برنامه تماس 3P را نمایش میدهد، نام برنامهای که تماس در آن انجام شده است، همانطور که در زیر نشان داده شده است، در گزارش تماس نمایش داده میشود:
برای تعیین نام برنامه مرتبط با ورودی گزارش تماس، از ستونهای PHONE_ACCOUNT_COMPONENT_NAME
و PHONE_ACCOUNT_ID
در ارائهدهنده گزارش تماس استفاده کنید تا نمونهای از PhoneAccountHandle
ایجاد کنید که منبع ورودی گزارش تماس را مشخص میکند. برای دریافت جزئیات حساب تلفن، TelecomManager
پرس و جو کنید.
برای تعیین اینکه آیا ورودی گزارش تماس از یک برنامه تماس 3P است، قابلیت های PhoneAccount
را بررسی کنید تا ببینید CAPABILITY_SELF_MANAGED
تنظیم شده است یا خیر.
روش getLabel
در PhoneAccount
برگشتی، نام برنامه مرتبط با ورودی گزارش تماس را از برنامه تماس 3P برمیگرداند.
اعتبار سنجی
برای آزمایش اینکه آیا دستگاه شما از برنامههای تماس 3P پشتیبانی میکند، از برنامه آزمایشی Telecomm استفاده کنید که API خود مدیریت ConnectionService را پیادهسازی میکند. برنامه در /packages/services/Telecomm/testapps/
واقع شده است.
برنامه آزمایشی را از ریشه مخزن منبع Android خود با استفاده از:
mmma packages/services/Telecomm/testapps/
build apk را با استفاده از
adb install -g -r <apk path>
نصب کنید. سپس یک نماد نمونه خود مدیریت به راهانداز شما اضافه میشود.روی نماد ضربه بزنید تا برنامه آزمایشی باز شود.
رسیدگی به تماس های دریافتی که تماس در حال انجام را قطع می کند
این مراحل را دنبال کنید تا مطمئن شوید که تماس ورودی، تماس 3P جاری را قطع می کند.
- تیک گزینه Holdable را بردارید.
- برای شروع یک نمونه تماس خروجی جدید، روی OUTGOING ضربه بزنید.
- روی دکمه ACTIVE ضربه بزنید تا تماس فعال شود.
- با تلفن دیگری با شماره تلفن دستگاه تحت آزمایش تماس بگیرید. این سناریویی را فراخوانی می کند که در آن شماره گیر شما با نام برنامه ای ارائه می شود که تماس آن قطع می شود.
- وقتی کارتان تمام شد، روی دکمه DISCONNECT در برنامه آزمایشی ضربه بزنید.
ورودی های گزارش تماس از برنامه های تماس 3P
پس از تکمیل مراحل بالا، برنامه آزمایشی باید یک تماس را به گزارش تماس سیستم ثبت کرده باشد. برای تأیید ثبت تماسهای دستگاه از برنامههای تماس 3P، برنامه شمارهگیر خود را باز کنید و تأیید کنید که تماس در گزارش تماسهای سیستم ظاهر میشود.