عرض الإشعارات الحساسة للوقت

قد يحتاج تطبيقك إلى جذب انتباه المستخدم بشكل عاجل في مواقف معيّنة، مثل المنبّهات الجارية أو تلقّي مكالمة واردة. في التطبيقات التي تستهدف الأجهزة التي تعمل بالإصدار 9 (المستوى 28 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم، يمكنك التعامل مع هذا الأمر من خلال تشغيل نشاط أثناء تشغيل التطبيق في الخلفية. ويوضّح هذا المستند كيفية تنفيذ هذا السلوك على الأجهزة التي تعمل بإصدار Android 10 (المستوى 29 من واجهة برمجة التطبيقات) وصولاً إلى Android 13 (المستوى 33 لواجهة برمجة التطبيقات).

إضافة إذن POST_NOTIFICATIONS

بدءًا من نظام التشغيل Android 13، أضِف السطر التالي إلى ملف AndroidManifest.xml:

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

وبعد حصولك على هذه القناة، يمكنك إنشاء قناة إشعارات.

إنشاء قناة إشعارات

يمكنك إنشاء قناة إشعارات لعرض الإشعارات بشكل صحيح والسماح للمستخدم بإدارة الإشعارات في إعدادات التطبيق. لمزيد من المعلومات حول قنوات الإشعارات، راجع إنشاء قنوات الإشعارات وإدارتها.

يمكنك إنشاء قنوات الإشعارات باستخدام طريقة onCreate في صف Application:

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 في شاشة نظام معلومات التطبيق في تطبيقك:

صورة تعرض &quot;معلومات التطبيق&quot; و&quot;شاشة الإشعارات&quot; الخاصة بتطبيقك
الشكل 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. مربّع حوار النظام لطلب إذن إرسال الإشعارات

في حال وافق المستخدم على طلب الإذن، سيظهر قسم معلومات التطبيق الخاص بالتطبيق على النحو التالي:

صورة تعرض شاشة &quot;معلومات التطبيق&quot; بعد منح إذن إرسال الإشعار
الشكل 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);