יצירת התראה על סגנון שיחה לאפליקציות לשיחות

ב-Android 12.0 (רמת API‏ 31) ואילך, המערכת מספקת את תבנית ההתראה CallStyle כדי להבדיל בין התראות על שיחות לבין סוגים אחרים של התראות. אפשר להשתמש בתבנית הזו כדי ליצור התראות על שיחות נכנסות או שיחות פעילות. התבנית תומכת בהתראות בפורמט גדול שכוללות את פרטי המתקשר ופעולות נדרשות כמו מענה לשיחות או דחיית שיחות.

שיחות נכנסות ושיחות פעילות הן אירועים בעדיפות גבוהה, ולכן ההתראות האלה מקבלות עדיפות עליונה במרכז ההתראות. הדירוג הזה גם מאפשר למערכת להעביר את השיחות האלה למכשירים אחרים.

תבנית ההתראה CallStyle כוללת את הפעולות הנדרשות הבאות:

  • מענה או דחייה של שיחות נכנסות.
  • לנתק שיחות פעילות.
  • מענה או ניתוק כדי לסנן את השיחה.

פעולות בסגנון הזה מופיעות כלחצנים, והמערכת מוסיפה באופן אוטומטי סמלים וטקסט מתאימים. אי אפשר לתייג את הכפתורים באופן ידני. מידע נוסף על עקרונות העיצוב של התראות זמין במאמר התראות.

התראות בסגנון שיחה עם לחצנים מתויגים
איור 1. תבנית CallStyle לשיחות נכנסות ופעילות.

הפעולות הנדרשות מועברות כ-Intent, כמו hangupIntent ו-answerIntent בקטעים הבאים. כל אחד מהם הוא הפניה לאסימון שמנוהל על ידי המערכת. האסימון הוא אובייקט קל משקל שאפשר להעביר בין אפליקציות ותהליכים שונים. המערכת אחראית לניהול משך החיים של האסימון ולוודא שאפשר להשתמש ב-PendingIntent גם אם האפליקציה שיצרה אותו כבר לא פועלת. כשנותנים לאפליקציה אחרת PendingIntent, נותנים לה הרשאה לבצע את הפעולה שצוינה, כמו דחייה או מענה. ההרשאה הזו ניתנת גם אם האפליקציה שיצרה את ה-Intent לא פועלת. למידע נוסף, תוכלו לקרוא את מאמרי העזרה של PendingIntent.

החל מ-Android 14 (רמת API‏ 34), אתם יכולים להגדיר התראות על שיחות כך שלא יהיה אפשר לסגור אותן. כדי לעשות את זה, משתמשים בהתראות של CallStyle עם Notification.FLAG_ONGOING_EVENT עד Notification.Builder#setOngoing(true).

הדוגמאות הבאות ממחישות שימוש בשיטות שונות עם ההתראה CallStyle.

// Create a new call, setting incoming caller.
val incomingCaller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

שיחה נכנסת

משתמשים ב-method‏ forIncomingCall() כדי ליצור התראה בסגנון שיחה לשיחה נכנסת.

// For demonstrative purposes only, should use a well-defined Intents.
val contentIntent =
    PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE)
val declineIntent =
    PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE)
val hangupIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE)
val answerIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE)
// Create a call style notification for an incoming call.
val builderForIncomingCall = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.CallStyle.forIncomingCall(incomingCaller, declineIntent, answerIntent))
    .addPerson(incomingCaller)

שיחה פעילה

משתמשים ב-method‏ forOngoingCall() כדי ליצור התראה בסגנון שיחה לשיחה פעילה.

// Create a call style notification for an ongoing call.
val builderForOngoingCall = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.CallStyle.forOngoingCall(callerAtOtherEnd, hangupIntent))
    .addPerson(caller)

סינון שיחה

משתמשים ב-method‏ forScreeningCall() כדי ליצור התראה בסגנון שיחה לסינון שיחה.

// Create a call style notification for screening a call.
val builder = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(caller)

תאימות ליותר גרסאות של Android

כדי להקצות להתראות CallStyle בגרסאות API‏ 30 ומטה את הדירוג הגבוה שהן מקבלות ברמת API‏ 31 ומעלה, צריך לשייך אותן לשירות שפועל בחזית. בנוסף, התראות של CallStyle ב-API בגרסה 30 או בגרסאות קודמות יכולות להגיע לדירוג דומה אם מסמנים את ההתראה כצבעונית באמצעות השיטה setColorized().

שימוש בממשקי ה-API של Telecom עם התראות CallStyle. מידע נוסף זמין בסקירה הכללית על Telecom framework.