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

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

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

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

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

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

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

הפעולות הנדרשות מועברות ככוונות, כמו hangupIntent ו-answerIntent בסעיפים הבאים. כל אחד מהם הוא הפניה לטוקן שמנוהל על ידי המערכת. האסימון הוא אובייקט קל משקל שאפשר להעביר בין אפליקציות ותהליכים שונים. המערכת אחראית לניהול תוחלת החיים של האסימון ולוודא שאפשר להשתמש ב-PendingIntent גם אם האפליקציה שיצרה אותו לא פועלת יותר. כשנותנים לאפליקציה אחרת PendingIntent, מעניקים לה הרשאה לבצע את הפעולה שצוינה, כמו דחייה או מענה. ההרשאה הזו ניתנת גם אם האפליקציה שיצרה את הכוונה לא פועלת. מידע נוסף מופיע במאמרי העזרה של 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 אפשר להשיג דירוג דומה להתראות בגרסה 30 של API או בגרסאות קודמות, על ידי סימון ההתראה כצבעונית באמצעות השיטה setColorized().

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