החל מ-Android 8.0 (רמת API 26), כל ההתראות צריכות להיות משויכות לערוץ. לכל ערוץ אפשר להגדיר את ההתנהגות החזותית והקולית שחלה על כל ההתראות בערוץ הזה. המשתמשים יכולים לשנות את ההגדרות האלה ולהחליט אילו ערוצי התראות מהאפליקציה שלכם יכולים להיות פולשניים או גלויים.
בסרטון הבא מוסבר על ערוצים ועל תכונות אחרות של התראות ב-Android 8.0.
הגדרות המשתמש לערוצי התראות זמינות לכל אפליקציה בהגדרות המערכת, כמו שמוצג באיור 1.
איור 1. הגדרות ההתראות של אפליקציית השעון ואחד מהערוצים שלה.
אחרי שיוצרים ערוץ התראות, אי אפשר לשנות את אופן הפעולה של ההתראות. בשלב הזה למשתמש יש שליטה מלאה. עם זאת, אתם עדיין יכולים לשנות את השם והתיאור של הערוץ.
יוצרים ערוץ לכל סוג התראה שצריך לשלוח. אפשר גם ליצור ערוצי התראות שישקפו את הבחירות של המשתמשים. לדוגמה, אפשר להגדיר ערוצי התראות נפרדים לכל קבוצת שיחה שמשתמש יוצר באפליקציית הודעות.
כשמטרגטים ל-Android 8.0 (רמת API 26) ואילך, צריך להטמיע ערוץ התראות אחד או יותר. אם הערך של targetSdkVersion
מוגדר ל-25 ומטה, כשהאפליקציה פועלת ב-Android 8.0 (רמת API 26) ומעלה, היא מתנהגת כמו במכשירים עם Android 7.1 (רמת API 25) ומטה.
יצירת ערוץ התראות
כדי ליצור ערוץ התראות, פועלים לפי השלבים הבאים:
יוצרים אובייקט
NotificationChannel
עם מזהה ערוץ ייחודי, שם שגלוי למשתמש ורמת חשיבות.אפשר גם לציין את התיאור שהמשתמש רואה בהגדרות המערכת באמצעות
setDescription()
.מעבירים את ערוץ ההתראות אל
createNotificationChannel()
כדי לרשום אותו.
בדוגמה הבאה מוסבר איך ליצור ולרשום ערוץ התראות:
Kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel. val name = getString(R.string.channel_name) val descriptionText = getString(R.string.channel_description) val importance = NotificationManager.IMPORTANCE_DEFAULT val mChannel = NotificationChannel(CHANNEL_ID, name, importance) mChannel.description = descriptionText // Register the channel with the system. You can't change the importance // or other notification behaviors after this. val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(mChannel) }
Java
private void createNotificationChannel() { // Create the NotificationChannel, but only on API 26+ because // the NotificationChannel class is not in the Support Library. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name = getString(R.string.channel_name); String description = getString(R.string.channel_description); int importance = NotificationManager.IMPORTANCE_DEFAULT; NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance); channel.setDescription(description); // Register the channel with the system. You can't change the importance // or other notification behaviors after this. NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } }
יצירה מחדש של ערוץ התראות קיים עם הערכים המקוריים שלו לא מבצעת פעולה כלשהי, ולכן אפשר להפעיל את הקוד הזה כשמפעילים אפליקציה.
כברירת מחדל, כל ההתראות שמתפרסמות בערוץ מסוים משתמשות בהתנהגויות החזותיות והקוליות שמוגדרות לפי רמת החשיבות מהמחלקה NotificationManagerCompat
, כמו IMPORTANCE_DEFAULT
או IMPORTANCE_HIGH
.
מידע נוסף על רמות חשיבות מופיע בקטע הבא.
אם רוצים להתאים אישית את התנהגות ברירת המחדל של ההתראות בערוץ, אפשר להפעיל שיטות כמו enableLights()
, setLightColor()
ו-setVibrationPattern()
ב-NotificationChannel
. חשוב לזכור: אחרי שיוצרים את הערוץ, אי אפשר לשנות את ההגדרות האלה, והמשתמש הוא זה שמחליט אם ההתנהגויות האלה יהיו פעילות.
אפשר גם ליצור כמה ערוצי התראות בפעולה אחת על ידי קריאה ל-createNotificationChannels()
.
הגדרת רמת החשיבות
חשיבות הערוץ משפיעה על רמת ההפרעה של כל ההתראות שמתפרסמות בערוץ. מגדירים אותו בבונה NotificationChannel
באמצעות אחת מחמש רמות החשיבות, מ-IMPORTANCE_NONE(0)
עד IMPORTANCE_HIGH(4)
.
כדי לתמוך במכשירים עם Android 7.1 (API ברמה 25) או גרסה ישנה יותר, צריך גם לקרוא ל-setPriority()
לכל התראה, באמצעות קבוע עדיפות מהמחלקה NotificationCompat
.
הקבועים של החשיבות (NotificationManager.IMPORTANCE_*
) והעדיפות (NotificationCompat.PRIORITY_*
) ממופים לאפשרויות החשיבות שגלויות למשתמש, כמו שמוצג בטבלה הבאה.
רמת החשיבות שמוצגת למשתמש | חשיבות (Android מגרסה 8.0 ואילך) | עדיפות (Android מגרסה 7.1 ומטה) |
---|---|---|
דחופה משמיעה צליל ומופיעה כהתראה קופצת. |
IMPORTANCE_HIGH |
PRIORITY_HIGH או PRIORITY_MAX |
גבוהה יושמע צליל. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
בינוני לא מושמע צליל. |
IMPORTANCE_LOW |
PRIORITY_LOW |
נמוכה לא משמיעה צליל ולא מופיעה בשורת הסטטוס. |
IMPORTANCE_MIN |
PRIORITY_MIN |
ללא לא משמיעה צליל ולא מופיעה בשורת הסטטוס או בלוח ההתראות. |
IMPORTANCE_NONE |
N/A |
כל ההתראות, ללא קשר לחשיבות שלהן, מופיעות במיקומים בממשק המשתמש של המערכת שלא מפריעים, כמו מגירת ההתראות והתג על סמל מרכז האפליקציות. עם זאת, אפשר לשנות את המראה של תג ההתראה.
אחרי ששולחים את הערוץ אל NotificationManager
, אי אפשר לשנות את רמת החשיבות. עם זאת, המשתמש יכול לשנות את ההעדפות שלו לגבי הערוצים של האפליקציה בכל שלב.
מידע על בחירת רמת עדיפות מתאימה זמין בקטע 'רמות עדיפות' במדריך לעיצוב התראות.
קריאת ההגדרות של ערוץ ההתראות
המשתמשים יכולים לשנות את ההגדרות של ערוצי ההתראות, כולל התנהגויות כמו רטט וצליל התראה. כדי לראות את ההגדרות שמשתמשים בחרו לערוצי ההתראות שלהם, פועלים לפי השלבים הבאים:
מקבלים את אובייקט
NotificationChannel
על ידי קריאה ל-getNotificationChannel()
או ל-getNotificationChannels()
.הגדרות ספציפיות של ערוץ בשאילתה, כמו
getVibrationPattern()
,getSound()
ו-getImportance()
.
אם מזהים הגדרה של ערוץ שלדעתכם מונעת את ההתנהגות הרצויה של האפליקציה, אפשר להציע למשתמש לשנות אותה ולספק פעולה לפתיחת הגדרות הערוץ, כמו שמוצג בקטע הבא.
פתיחה של הגדרות ערוץ ההתראות
אחרי שיוצרים ערוץ התראות, אי אפשר לשנות באופן פרוגרמטי את ההתנהגויות החזותיות והקוליות של ערוץ ההתראות. רק המשתמש יכול לשנות את התנהגויות הערוץ בהגדרות המערכת. כדי לספק למשתמשים גישה קלה להגדרות ההתראות האלה, מוסיפים פריט בממשק המשתמש של ההגדרות באפליקציה, שפותח את הגדרות המערכת האלה.
אפשר לפתוח את הגדרות המערכת של ערוצי ההתראות באמצעות Intent
שמשתמש בפעולה ACTION_CHANNEL_NOTIFICATION_SETTINGS
.
לדוגמה, קטע הקוד הבא מראה איך אפשר להפנות משתמש להגדרות של ערוץ התראות:
Kotlin
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, packageName) putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()) } startActivity(intent)
Java
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()); startActivity(intent);
שימו לב שה-Intent דורש שני נתונים נוספים שמציינים את שם החבילה של האפליקציה (שנקרא גם מזהה האפליקציה) ואת הערוץ שרוצים לערוך.
מחיקת ערוץ התראות
כדי למחוק ערוצי התראות, מתקשרים אל
deleteNotificationChannel()
.
קוד לדוגמה שמראה איך לבצע את התהליך הזה:
Kotlin
// The id of the channel. val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val id: String = "my_channel_01" notificationManager.deleteNotificationChannel(id)
Java
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // The id of the channel. String id = "my_channel_01"; notificationManager.deleteNotificationChannel(id);
יצירת קבוצה של ערוצי התראות
אם רוצים לארגן עוד יותר את המראה של הערוצים בממשק המשתמש של ההגדרות, אפשר ליצור קבוצות ערוצים. מומלץ לעשות את זה אם האפליקציה תומכת בכמה חשבונות משתמשים, למשל פרופילים לעבודה, כי כך אפשר ליצור קבוצה של ערוצי התראות לכל חשבון. כך המשתמשים יכולים לזהות בקלות ולשלוט בכמה ערוצי התראות עם שמות זהים.
איור 2. הגדרות של ערוצי התראות עם קבוצות לחשבונות לשימוש אישי ולחשבונות לצורכי עבודה.
לדוגמה, אפליקציה של רשת חברתית עשויה לכלול תמיכה בחשבונות אישיים ובחשבונות לעבודה. בתרחיש הזה, יכול להיות שכל חשבון יצטרך כמה ערוצי התראות עם פונקציות ושמות זהים, כמו אלה:
חשבון אישי עם שני ערוצים:
תגובות חדשות
המלצות לפרסום
חשבון עסקי עם שני ערוצים:
תגובות חדשות
המלצות לפרסום
ארגון ערוצי ההתראות בקבוצות לכל חשבון מאפשר למשתמשים להבחין ביניהם.
לכל קבוצת ערוצי התראות נדרש מזהה, שחייב להיות ייחודי בחבילה, וגם שם שגלוי למשתמש. בקטע הקוד הבא מוצג אופן היצירה של קבוצת ערוצי התראות.
Kotlin
// The id of the group. val groupId = "my_group_01" // The user-visible name of the group. val groupName = getString(R.string.group_name) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
Java
// The id of the group. String groupId = "my_group_01"; // The user-visible name of the group. CharSequence groupName = getString(R.string.group_name); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));
אחרי שיוצרים קבוצה חדשה, אפשר להתקשר אל
setGroup()
כדי לשייך אובייקט NotificationChannel
חדש לקבוצה.
אחרי ששולחים את הערוץ למנהל ההתראות, אי אפשר לשנות את השיוך בין ערוץ ההתראות לקבוצה.