در اندروید ۱۲.۰ (سطح API 31) و بالاتر، سیستم الگوی اعلان CallStyle را برای تمایز اعلانهای تماس از سایر انواع اعلانها ارائه میدهد. از این الگو برای ایجاد اعلانهای تماس ورودی یا مداوم استفاده کنید. این الگو از اعلانهای با فرمت بزرگ پشتیبانی میکند که شامل اطلاعات تماسگیرنده و اقدامات لازم مانند پاسخ دادن یا رد تماسها هستند.
از آنجا که تماسهای ورودی و مداوم از اولویت بالایی برخوردارند، این اعلانها در قسمت اعلانها در اولویت بالاتری قرار میگیرند. این رتبهبندی همچنین به سیستم امکان میدهد تا این تماسهای اولویتبندیشده را به دستگاههای دیگر ارسال کند.
الگوی اعلان CallStyle شامل اقدامات مورد نیاز زیر است:
- پاسخ دادن یا رد کردن تماسهای دریافتی.
- برای تماسهای مداوم، گوشی را قطع کنید .
- برای بررسی تماس، پاسخ دهید یا قطع کنید .
اقدامات در این سبک به صورت دکمه ظاهر میشوند و سیستم به طور خودکار آیکونها و متن مناسب را اضافه میکند. برچسبگذاری دستی دکمهها پشتیبانی نمیشود. برای اطلاعات بیشتر در مورد اصول طراحی اعلان، به اعلانها مراجعه کنید.

اقدامات مورد نیاز به عنوان intentها، مانند hangupIntent و answerIntent در بخشهای بعدی، ارسال میشوند. هر یک از اینها ارجاعی به یک توکن هستند که توسط سیستم نگهداری میشود. توکن یک شیء سبک است که میتواند بین برنامهها و فرآیندهای مختلف منتقل شود. سیستم مسئول مدیریت طول عمر توکن و اطمینان از قابل استفاده بودن PendingIntent حتی اگر برنامهای که آن را ایجاد کرده دیگر در حال اجرا نباشد، است. وقتی به برنامه دیگری PendingIntent میدهید، به آن اجازه انجام عملیات مشخص شده، مانند رد کردن یا پاسخ دادن را میدهید. این اجازه حتی اگر برنامهای که intent را ایجاد کرده در حال اجرا نباشد، اعطا میشود. برای اطلاعات بیشتر، به مستندات مرجع PendingIntent مراجعه کنید.
از اندروید ۱۴ (سطح API ۳۴)، میتوانید اعلانهای تماس را طوری پیکربندی کنید که قابل رد شدن نباشند. برای انجام این کار، از اعلانهای CallStyle به همراه Notification.FLAG_ONGOING_EVENT از طریق Notification.Builder#setOngoing(true) استفاده کنید.
در ادامه مثالهایی از استفاده از متدهای مختلف با اعلان CallStyle آمده است.
// Create a new call, setting the user as the caller.
val incomingCaller = Person.Builder()
.setName("Jane Doe")
.setImportant(true)
.build()
تماس ورودی
از متد forIncomingCall() برای ایجاد یک اعلان به سبک تماس برای یک تماس ورودی استفاده کنید.
// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
.setContentIntent(contentIntent)
.setSmallIcon(smallIcon)
.setStyle(
Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
.addPerson(incomingCaller)
تماس مداوم
از متد forOngoingCall() برای ایجاد یک اعلان به سبک تماس برای یک تماس مداوم استفاده کنید.
// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
.setContentIntent(contentIntent)
.setSmallIcon(smallIcon)
.setStyle(
Notification.CallStyle.forOngoingCall(caller, hangupIntent))
.addPerson(second_caller)
غربال کردن تماس
از متد forScreeningCall() برای ایجاد یک اعلان به سبک فراخوانی (call) برای غربالگری یک تماس استفاده کنید.
// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
.setContentIntent(contentIntent)
.setSmallIcon(smallIcon)
.setStyle(
Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
.addPerson(second_caller)
سازگاری با نسخههای بیشتر اندروید را فراهم کنید
اعلانهای CallStyle را در API نسخههای 30 یا قبلتر با یک سرویس پیشزمینه مرتبط کنید تا رتبه بالایی که در API سطح 31 یا بعد از آن به آنها داده میشود را به آنها اختصاص دهید. علاوه بر این، اعلانهای CallStyle در API نسخه 30 یا قبلتر میتوانند با علامتگذاری اعلان به صورت رنگی، با استفاده از متد setColorized() ، به رتبهبندی مشابهی دست یابند.
از APIهای مخابراتی به همراه اعلانهای CallStyle استفاده کنید. برای اطلاعات بیشتر، به نمای کلی چارچوب مخابراتی مراجعه کنید.