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