החל מ-Android 8.0 (רמת API 26), יש להקצות את כל ההתראות . עבור כל ערוץ, ניתן להגדיר את ההתנהגות החזותית והשמיעה הוחלו על כל ההתראות בערוץ הזה. המשתמשים יכולים לשנות את ההגדרות האלה ולהחליט אילו ערוצי התראות מהאפליקציה שלכם עלולים להפריע גלוי.
בסרטון הבא תמצאו סקירה כללית של הערוצים והתראות נוספות ב-Android 8.0.
הגדרות המשתמש לערוצי התראות זמינות לכל אפליקציה הגדרות המערכת, כפי שמוצג באיור 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()
הגדרת רמת החשיבות
חשיבות הערוץ משפיעה על רמת ההפרעה של כל ההתראות שמפורסמות
את הערוץ. ציין אותו ב-constructor של 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);
חשוב לשים לב שהכוונה מחייבת שתי תוספות שמציינות את שם החבילה של האפליקציה (שנקרא גם מזהה האפליקציה) והערוץ שרוצים לערוך.
מחיקת ערוץ התראות
יש לך אפשרות למחוק ערוצי התראות באמצעות שיחת טלפון
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);
יצירת קבוצת ערוצים של התראות
כדי לארגן עוד יותר את מראה הערוצים בממשק המשתמש של ההגדרות, אפשר ליצור קבוצות ערוצים. כדאי לעשות זאת כשהאפליקציה שלך תומכת כמה חשבונות משתמשים, למשל פרופילים של עבודה, כי היא מאפשרת ליצור קבוצת ערוצים לשליחת התראות לכל חשבון. כך המשתמשים יוכלו לזהות בקלות ולשלוט בכמה ערוצי התראות שיש להם שמות זהים.
לדוגמה, אפליקציה של רשת חברתית עשויה לכלול תמיכה באישיות ובעבודה חשבונות. בתרחיש הזה, כל חשבון עשוי לדרוש התראות מרובות ערוצים בעלי פונקציות ושמות זהים, כגון:
חשבון אישי עם שני ערוצים:
תגובות חדשות
המלצות לפוסטים
חשבון עסקי עם שני ערוצים:
תגובות חדשות
המלצות לפוסטים
הסידור של ערוצי ההתראות בקבוצות לכל חשבון מאפשר למשתמשים להבדיל ביניהם.
כל קבוצת ערוצים של התראות דורשת מזהה. המזהה חייב להיות ייחודי חבילה, וכן שם גלוי למשתמש. קטע הקוד הבא מדגים איך כדי ליצור קבוצת ערוצים להתראות.
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
חדש לקבוצה.
אחרי ששולחים את הערוץ למנהל ההתראות, אי אפשר לשנות את בין ערוץ ההתראות לבין קבוצת ההתראות.