יצירת התראה ניתנת להרחבה

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

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

הוספת תמונה גדולה

כדי להוסיף תמונה להתראה, מעבירים מופע של NotificationCompat.BigPictureStyle אל setStyle().

var notification =
    NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(com.example.compose.snippets.R.drawable.ic_logo)
        .setContentTitle("Title")
        .setContentText("Content text")
        .setStyle(
            NotificationCompat.BigPictureStyle()
                .bigPicture(bitmapImage)
        )
        .build()

כדי שהתמונה תופיע כתמונה ממוזערת רק כשההתראה מכווצת, כמו שמוצג באיור הבא, קוראים ל-setLargeIcon() ומעבירים לה את התמונה. אחר כך קוראים ל-BigPictureStyle.bigLargeIcon() ומעבירים לו את null כדי שהסמל הגדול ייעלם כשההתראה מורחבת:

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setContentTitle("Title")
    .setContentText("Content text")
    .setLargeIcon(Icon.createWithResource(context, R.drawable.dog))
    .setStyle(
        NotificationCompat.BigPictureStyle()
            .bigPicture(bitmapImage)
            .bigLargeIcon(null as Bitmap?)
    )
    .build()

התראה מכווצת והתראה מורחבת שמכילות תמונה כחולה
איור 1. התראה באמצעות NotificationCompat.BigPictureStyle.

הוספה של בלוק טקסט גדול

הוספת NotificationCompat.BigTextStyle כדי להציג טקסט באזור התוכן המורחב של ההתראה:

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setContentTitle("Sender name")
    .setContentText("Email subject")
    .setLargeIcon(Icon.createWithResource(context, R.drawable.dog))
    .setStyle(
        NotificationCompat.BigTextStyle()
            .bigText(someVeryLongMessage)
    )
    .build()

התראה מכווצת והתראה מורחבת באמצעות BigTextStyle
איור 2. התראה באמצעות NotificationCompat.BigTextStyle.

יצירת התראה בסגנון תיבת דואר נכנס

אם רוצים להוסיף כמה שורות קצרות של סיכום, כמו קטעים מאימיילים נכנסים, צריך להשתמש בNotificationCompat.InboxStyle בהתראה. כך אפשר להוסיף כמה קטעי טקסט של תוכן, שכל אחד מהם נחתך לשורה אחת, במקום שורת הטקסט הרציפה שמתקבלת מ-NotificationCompat.BigTextStyle.

כדי להוסיף שורה חדשה, קוראים ל-addLine() עד שש פעמים, כמו בדוגמה הבאה. אם מוסיפים יותר משש שורות, רק שש השורות הראשונות מוצגות.

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.mail)
    .setContentTitle("5 New mails from Frank")
    .setContentText("Check them out")
    .setLargeIcon(bitmapImage)
    .setStyle(
        NotificationCompat.InboxStyle()
            .addLine("Re: Planning")
            .addLine("Delivery on its way")
            .addLine("Follow-up")
    )
    .build()

התוצאה אמורה להיראות כך:

התראה מורחבת בסגנון תיבת הדואר הנכנס
איור 3. התראה בסגנון תיבת הדואר הנכנס מורחבת.

איך רואים שיחה בהתראה

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

כדי להוסיף הודעה חדשה, מתקשרים אל addMessage() ומעבירים את טקסט ההודעה, את שעת הקבלה ואת שם השולח. אפשר גם להעביר את המידע הזה כאובייקט NotificationCompat.MessagingStyle.Message, כמו בדוגמה הבאה:

val message1 = NotificationCompat.MessagingStyle.Message(
    messages[0].text,
    messages[0].time,
    messages[0].sender
)
val message2 = NotificationCompat.MessagingStyle.Message(
    messages[1].text,
    messages[1].time,
    messages[1].sender
)
notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.MessagingStyle(Person.Builder().setName("Me").build())
            .addMessage(message1)
            .addMessage(message2)
    )
    .build()

התראה בסגנון של הודעה
איור 4. התראה באמצעות NotificationCompat.MessagingStyle.

כשמשתמשים ב-NotificationCompat.MessagingStyle, המערכת מתעלמת מכל הערכים שמוגדרים ל-setContentTitle() ול-setContentText().

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

הסגנון הזה חל רק על מכשירים עם Android בגרסה 7.0 (רמת API‏ 24) ומעלה. כשמשתמשים בספריית התאימות (NotificationCompat), כמו שמוצג בהמשך, ההתראות עם MessagingStyle עוברות אוטומטית לסגנון התראה נתמך עם תצוגה מורחבת.

כשיוצרים התראה כזו לשיחה בצ'אט, מוסיפים פעולה של תשובה ישירה.

יצירת התראה עם ממשק השליטה במדיה

מפעילים את האפשרות MediaStyleNotificationHelper.MediaStyle כדי להציג את אמצעי הבקרה להפעלת מדיה ואת פרטי הרצועה.

מציינים את MediaSession המשויך בקונסטרוקטור. כך מערכת Android יכולה להציג את המידע הנכון על המדיה.

קוראים לפונקציה addAction() עד חמש פעמים כדי להציג עד חמישה לחצני סמלים. מתקשרים אל setLargeIcon() כדי להגדיר את עטיפת האלבום.

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

בדוגמה הבאה אפשר לראות איך יוצרים התראה עם ממשק השליטה במדיה:

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    // Show controls on lock screen even when user hides sensitive content.
    .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
    .setSmallIcon(com.example.compose.snippets.R.drawable.play)
    // Add media control buttons that invoke intents in your media service
    .addAction(R.drawable.previous, "Previous", null /* Add valid intent */) // #0
    .addAction(R.drawable.pause, "Pause", null /* Add valid intent */) // #1
    .addAction(R.drawable.next, "Next", null /* Add valid intent */) // #2
    // Apply the media style template.
    .setStyle(MediaStyleNotificationHelper.MediaStyle(mediaSession)
        .setShowActionsInCompactView(1 /* #1: pause button */))
    .setContentTitle("Wonderful music")
    .setContentText("My Awesome Band")
    .setLargeIcon(bitmapImage)
    .build()

התראה עם סגנון מדיה
איור 5. התראה באמצעות MediaStyleNotificationHelper.MediaStyle.

מקורות מידע נוספים

מידע נוסף על MediaStyle ועל התראות שאפשר להרחיב מופיע במקורות המידע הבאים.