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

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

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

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

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

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

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

  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()
התראה מכווצת והתראה מורחבת שמכילה תמונה כחולה
איור 1. התראה באמצעות NotificationCompat.BigPictureStyle.

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

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

  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()
התראה מכווצת והתראה מורחבת באמצעות BigTextStyle
איור 2. התראה באמצעות NotificationCompat.BigTextStyle.

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

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

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

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

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

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

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

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

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

  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()
התראה בסגנון של הודעה
איור 4. התראה באמצעות NotificationCompat.MessagingStyle.

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

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

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

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

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

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

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

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

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

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

  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()
התראה עם סגנון מדיה
איור 5. התראה באמצעות MediaStyleNotificationHelper.MediaStyle.

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

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