יכול להיות שהאפליקציה תצטרך למשוך את תשומת הלב של המשתמש בדחיפות במצבים מסוימים, למשל אם יש התראה פעילה או שיחה נכנסת. במכשירים עם Android 9 (רמת API 28) ומטה, אפשר לטפל בזה על ידי הפעלת פעילות בזמן שהאפליקציה פועלת ברקע. במאמר הזה מוסבר איך להשיג את ההתנהגות הזו במכשירים עם Android 10 (רמת API 29) (רמת API 29) ומעלה.
הוספת ההרשאה POST_NOTIFICATIONS
החל מ-Android 13 (רמת API 33), צריך להצהיר על ההרשאה POST_NOTIFICATIONS בקובץ AndroidManifest.xml:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
אחרי שמצהירים על ההרשאה, יוצרים ערוץ התראות.
יצירת ערוץ התראות
יצירת ערוץ התראות להצגת התראות ולאפשר למשתמשים לנהל את קטגוריות ההתראות בהגדרות המערכת. מידע נוסף על ערוצי התראות זמין במאמר יצירה וניהול של ערוצי התראות.
יוצרים את ערוצי ההתראות בשיטה onCreate של המחלקה Application:
class MyApplication : Application() { override fun onCreate() { super.onCreate() val channel = NotificationChannel( CHANNEL_ID, "High priority notifications", NotificationManager.IMPORTANCE_HIGH ) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(channel) } }
כשהמשתמש מפעיל את האפליקציה בפעם הראשונה, המערכת מציגה את הערוץ במסך פרטי האפליקציה, כמו שמוצג באיור 1:
ניהול ההרשאות לשליחת התראות
החל מ-Android 13, צריך לבקש הרשאות לשליחת התראות לפני שמציגים התראות למשתמשים.
בדוגמת הקוד הבאה אפשר לראות איך מבקשים הרשאת הפעלת התראות בזמן ריצה ב-Jetpack Compose:
val permissionLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.RequestPermission(), onResult = { hasNotificationPermission = it } ) // ... Button( onClick = { if (!hasNotificationPermission) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) } } }, ) { Text(text = "Request permission") }
במכשירים עם Android 13 ואילך, הקשה על הלחצן בקשת הרשאה מציגה את תיבת הדו-שיח של המערכת שמוצגת באיור 2:
כשהמשתמש מעניק את ההרשאה, המערכת מעדכנת את המסך פרטי האפליקציה, כמו שמוצג באיור 3:
יצירת התראה עם עדיפות גבוהה
כשיוצרים התראה בעדיפות גבוהה, חשוב לספק כותרת ברורה וטקסט של ההודעה. כדאי גם להקצות ערוץ עם חשיבות גבוהה ורמת עדיפות.
בדוגמת הקוד הבאה מוגדרת ונוצרת התראה בעדיפות גבוהה:
private fun showNotification() { val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.baseline_auto_awesome_24) .setContentTitle("HIGH PRIORITY") .setContentText("Check this dog puppy video NOW!") .setPriority(NotificationCompat.PRIORITY_HIGH) .setCategory(NotificationCompat.CATEGORY_RECOMMENDATION) notificationManager.notify(0, notificationBuilder.build()) }
הצגת ההתראה למשתמש
הפעלת הפונקציה showNotification מפעילה את ההתראה באופן הבא:
Button(onClick = { showNotification() }) { Text(text = "Show notification") }
באיור 4 מוצגת ההתראה בעדיפות גבוהה שמוצגת על ידי המערכת:
התראה מתמשכת
כשמציגים למשתמש את ההתראה, הוא יכול לאשר או לבטל את ההתראה או התזכורת של האפליקציה. לדוגמה, המשתמש יכול לאשר או לדחות שיחה טלפונית נכנסת.
אם ההתראה מייצגת משימה ברקע שנמצאת בעיצומה, כמו שיחה פעילה בטלפון, צריך לשייך את ההתראה לשירות שפועל בחזית. בקטע הקוד הבא מוצג איך להציג התראה שמשויכת לשירות שפועל בחזית:
// Provide a unique integer for the "notificationId" of each notification. startForeground(notificationId, notification)
כדאי להשתמש בעדכונים בזמן אמת
התראות שוטפות שרלוונטיות לזמן מוגבל יכולות להרוויח מחשיפה מוגברת. כדאי להציג התראות מתמשכות כעדכונים בזמן אמת כדי להציג מידע על הסטטוס בממשקי משתמש שונים במערכת.