یک اعلان سبک تماس برای برنامه های تماس ایجاد کنید

در اندروید 12.0 (سطح API 31) و جدیدتر، سیستم الگوی اعلان CallStyle را برای تشخیص اعلان‌های تماس از سایر انواع اعلان‌ها ارائه می‌کند. از این الگو برای ایجاد اعلان تماس های ورودی یا جاری استفاده کنید. این الگو از اعلان‌هایی با فرمت بزرگ پشتیبانی می‌کند که شامل اطلاعات تماس‌گیرنده و اقدامات لازم مانند پاسخ دادن یا رد کردن تماس‌ها است.

از آنجایی که تماس‌های ورودی و جاری رویدادهایی با اولویت بالا هستند، این اعلان‌ها اولویت اصلی را در سایه اعلان دریافت می‌کنند. این رتبه‌بندی همچنین سیستم را قادر می‌سازد تا این تماس‌های اولویت‌دار را به دستگاه‌های دیگر ارسال کند.

الگوی اعلان CallStyle شامل اقدامات لازم زیر است:

  • برای تماس های دریافتی پاسخ دهید یا رد کنید .
  • تماس را برای تماس های مداوم قطع کنید .
  • برای غربالگری تماس پاسخ دهید یا قطع کنید .

اقدامات در این سبک به صورت دکمه ظاهر می شوند و سیستم به طور خودکار آیکون ها و متن مناسب را اضافه می کند. برچسب زدن دستی دکمه ها پشتیبانی نمی شود. برای اطلاعات بیشتر در مورد اصول طراحی اعلان ها، به اعلان ها مراجعه کنید.

اعلان‌های سبک تماس با دکمه‌های برچسب‌دار
شکل 1. الگوی CallStyle برای تماس های ورودی و جاری.

اقدامات مورد نیاز به عنوان intent ارسال می شوند، مانند hangupIntent و answerIntent در بخش های زیر. هر یک از اینها اشاره ای به نشانه ای هستند که توسط سیستم نگهداری می شود. توکن یک شی سبک وزن است که می تواند بین برنامه ها و فرآیندهای مختلف منتقل شود. این سیستم مسئول مدیریت طول عمر توکن و اطمینان از قابل استفاده بودن PendingIntent است حتی اگر برنامه ای که آن را ایجاد کرده دیگر اجرا نشود. وقتی به برنامه دیگری PendingIntent می دهید، به آن اجازه می دهید تا عملیات مشخص شده را انجام دهد، مانند رد یا پاسخ. این مجوز اعطا می شود حتی اگر برنامه ای که قصد ایجاد کرده است در حال حاضر اجرا نشود. برای اطلاعات بیشتر، به مستندات مرجع PendingIntent مراجعه کنید.

با شروع Android 14 (سطح API 34)، می‌توانید اعلان‌های تماس را طوری پیکربندی کنید که غیرقابل رد کردن باشد. برای انجام این کار، از اعلان‌های 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()

جاوا

// Create a new call with the user as the caller.
Person incomingCaller = new 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)

جاوا

// Create a call style notification for an incoming call.
Notification.Builder 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)

جاوا

// Create a call style notification for an ongoing call.
Notification.Builder builder = new Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOngoingCall(caller, hangupIntent))
    .addPerson(second_caller);

یک تماس را غربال کنید

از متد forScreeningCall() برای ایجاد اعلان سبک تماس برای غربال کردن تماس استفاده کنید.

کاتلین

// 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)

جاوا

// Create a call style notification for screening a call.
Notification.Builder builder = new Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

سازگاری را با نسخه‌های Android بیشتری ارائه دهید

اعلان‌های CallStyle را در نسخه‌های API 30 یا قبل‌تر با یک سرویس پیش‌زمینه مرتبط کنید تا به آنها رتبه بالایی را که در سطح API 31 یا بالاتر داده می‌شود اختصاص دهید. علاوه بر این، اعلان‌های CallStyle در API نسخه 30 یا قبل‌تر می‌توانند با علامت‌گذاری اعلان به‌عنوان رنگی، با استفاده از روش setColorized() به رتبه‌بندی مشابهی دست یابند.

از API های Telecom با اعلان های CallStyle استفاده کنید. برای اطلاعات بیشتر، به نمای کلی چارچوب Telecom مراجعه کنید.