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

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

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

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

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

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_post)
        .setContentTitle(imageTitle)
        .setContentText(imageDescription)
        .setStyle(NotificationCompat.BigPictureStyle()
                .bigPicture(myBitmap))
        .build()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_post)
        .setContentTitle(imageTitle)
        .setContentText(imageDescription)
        .setStyle(new NotificationCompat.BigPictureStyle()
               .bigPicture(myBitmap))
        .build();

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

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_post)
        .setContentTitle(imageTitle)
        .setContentText(imageDescription)
        .setLargeIcon(myBitmap)
        .setStyle(NotificationCompat.BigPictureStyle()
                .bigPicture(myBitmap)
                .bigLargeIcon(null))
        .build()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_post)
        .setContentTitle(imageTitle)
        .setContentText(imageDescription)
        .setLargeIcon(myBitmap)
        .setStyle(new NotificationCompat.BigPictureStyle()
                .bigPicture(myBitmap)
                .bigLargeIcon(null))
        .build();
תמונה שמציגה התראה מכווצת והתראה מורחבת עם תמונה כחולה
איור 1. התראה באמצעות NotificationCompat.BigPictureStyle

להוסיף גוש טקסט גדול

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

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setStyle(NotificationCompat.BigTextStyle()
                .bigText(emailObject.getSubjectAndSnippet()))
        .build()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setStyle(new NotificationCompat.BigTextStyle()
                .bigText(emailObject.getSubjectAndSnippet()))
        .build();
תמונה שמציגה התראה מכווצת והתראה מורחבת באמצעות BigTextStyle
איור 2. התראה באמצעות NotificationCompat.BigTextStyle

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

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

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

Kotlin

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

Java

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

התוצאה נראית כך:

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

איך מציגים את השיחה בהתראות

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

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

Kotlin

val message1 = NotificationCompat.MessagingStyle.Message(
        messages[0].getText(),
        messages[0].getTime(),
        messages[0].getSender())
val message2 = NotificationCompat.MessagingStyle.Message(
        messages[1].getText(),
        messages[1].getTime(),
        messages[1].getSender())
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_message)
        .setStyle(
                NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                .addMessage(message1)
                .addMessage(message2))
        .build()

Java

NotificationCompat.MessagingStyle.Message message1 =
        new NotificationCompat.MessagingStyle.Message(messages[0].getText(),
                                                      messages[0].getTime(),
                                                      messages[0].getSender());
NotificationCompat.MessagingStyle.Message message2 =
        new NotificationCompat.MessagingStyle.Message(messages[1].getText(),
                                                      messages[1].getTime(),
                                                      messages[1].getSender());

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_message)
        .setStyle(new NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                .addMessage(message1)
                .addMessage(message2))
        .build();
תמונה שמציגה התראה בסגנון של העברת הודעות
איור 4. התראה באמצעות NotificationCompat.MessagingStyle

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

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

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

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

יצירת התראה באמצעות בקרי מדיה

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

ציון השיוך המשויך MediaSession ב- constructor. כך מערכת Android תוכל להציג את המידע הנכון לגבי מדיה.

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

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

תוכלו להיעזר בדוגמה הבאה כדי ליצור התראה באמצעות בקרי מדיה:

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        // Show controls on lock screen even when user hides sensitive content.
        .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
        .setSmallIcon(R.drawable.ic_stat_player)
        // Add media control buttons that invoke intents in your media service
        .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
        .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent) // #1
        .addAction(R.drawable.ic_next, "Next", nextPendingIntent) // #2
        // Apply the media style template.
        .setStyle(MediaStyleNotificationHelper.MediaStyle(mediaSession)
                .setShowActionsInCompactView(1 /* #1: pause button \*/))
        .setContentTitle("Wonderful music")
        .setContentText("My Awesome Band")
        .setLargeIcon(albumArtBitmap)
        .build()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        // Show controls on lock screen even when user hides sensitive content.
        .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
        .setSmallIcon(R.drawable.ic_stat_player)
        // Add media control buttons that invoke intents in your media service
        .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
        .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent)  // #1
        .addAction(R.drawable.ic_next, "Next", nextPendingIntent)     // #2
        // Apply the media style template.
        .setStyle(new MediaStyleNotificationHelper.MediaStyle(mediaSession)
                .setShowActionsInCompactView(1 /* #1: pause button */))
        .setContentTitle("Wonderful music")
        .setContentText("My Awesome Band")
        .setLargeIcon(albumArtBitmap)
        .build();
תמונה שמוצגת בה התראה עם סגנון מדיה
איור 5. התראה באמצעות MediaStyleNotificationHelper.MediaStyle

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

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