הצגת התראות תלויות-זמן

במצבים מסוימים ייתכן שהאפליקציה תצטרך לקבל את תשומת הלב של המשתמש בדחיפות. כגון התראה מתמשכת או שיחה נכנסת. באפליקציות שמטרגטות מכשירים שפועלים ב-Android 9 (רמת API 28) ומטה, אפשר לטפל בבעיה הזו על ידי הפעלת פעילות בזמן שהאפליקציה פועלת ברקע. במסמך הזה נסביר איך ליצור ההתנהגות הזאת במכשירים עם Android 10 (רמת API 29) כדי Android 13 (רמת API 33).

הוסף את ההרשאה POST_NOTIFICATIONS

החל מ-Android 13, מוסיפים את השורה הבאה אל קובץ AndroidManifest.xml:

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

לאחר מכן, תוכלו ליצור ערוץ התראות.

יצירת ערוץ התראות

יוצרים ערוץ התראות כדי להציג את ההתראות כראוי ולאפשר ל- לנהל את ההתראות בהגדרות האפליקציה. מידע נוסף על ערוצי התראות, ראו יצירה וניהול של התראות הערוצים.

יוצרים את ערוצי ההתראות של הכיתה Application השיטה onCreate:

Kotlin

class DACapp : 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 במסך המערכת של פרטי האפליקציה באפליקציה:

תמונה שמוצג בה המסך &#39;פרטי האפליקציה&#39; ו&#39;התראות&#39; של האפליקציה.
איור 1. הקטע 'התראות' באפליקציה מסך מידע בהגדרות המערכת של האפליקציה.

ניהול ההרשאות לשליחת התראות

החל מ-Android 13, צריך לבקש הרשאות לשליחת התראות לפני אתם מציגים התראות למשתמשים.

ההטמעה המינימלית נראית כך:

Kotlin

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:

תמונה שמוצגת בה תיבת דו-שיח של בקשת הרשאה
איור 2. תיבת דו-שיח של המערכת להתראה בקשת הרשאה.

אם המשתמש יאשר את בקשת ההרשאה, הקטע פרטי האפליקציה של האפליקציה יוצג כמו איור 3:

תמונה שמוצג בה המסך של פרטי האפליקציה אחרי שהתקבלה בקשה להרשאת התראה
איור 3. ניתנו הרשאות לשליחת התראות.

יצירת התראה בעדיפות גבוהה

כשיוצרים את ההתראה, חשוב לכלול כותרת והודעה תיאוריים.

הדוגמה הבאה מכילה התראה:

Kotlin

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(666, notificationBuilder.build())
}

הצגת ההתראה למשתמש

קריאה לפונקציה showNotification() מפעילה את ההתראה באופן הבא:

Kotlin

Button(onClick = { showNotification() }) {
    Text(text = "Show notification")
}

ההתראה בדוגמה הזו נראית כמו איור 4:

תמונה שמוצגת בה הודעה בעדיפות גבוהה
איור 4. התראה בעדיפות גבוהה.

התראה מתמשכת

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

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

Kotlin

// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, notification)

Java

// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, notification);