יכול להיות שהאפליקציה תצטרך למשוך את תשומת הלב של המשתמש בדחיפות במצבים מסוימים, כמו התראה שמופעלת או שיחה נכנסת. במכשירים עם Android בגרסה 9 (רמת API 28) ומטה, אפשר לטפל בזה על ידי הפעלת פעילות כשהאפליקציה פועלת ברקע. במסמך הזה מוסבר איך להשיג את ההתנהגות הזו במכשירים עם Android גרסה 10 (רמת API 29) ומעלה.
הוספת ההרשאה POST_NOTIFICATIONS
החל מ-Android 13 (רמת API 33), צריך להצהיר על ההרשאה POST_NOTIFICATIONS בקובץ AndroidManifest.xml:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
אחרי שמצהירים על ההרשאה, יוצרים ערוץ התראות.
יצירת ערוץ התראות
יוצרים ערוץ התראות כדי להציג התראות ולאפשר למשתמשים לנהל את קטגוריות ההתראות בהגדרות המערכת. למידע נוסף על ערוצי התראות, קראו את המאמר יצירה וניהול של ערוצי התראות.
יוצרים את ערוצי ההתראות ב-method 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 ואילך, לחיצה על הכפתור Request permission תציג את תיבת הדו-שיח של המערכת שמופיעה באיור 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)
כדאי להשתמש בעדכונים בזמן אמת
התראות מתמשכות שמוגבלות בזמן יכולות להרוויח מחשיפה מוגברת. כדאי לקדם התראות מתמשכות כעדכונים בזמן אמת כדי להציג מידע על הסטטוס בממשקי המשתמש של המערכת.