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

قد يحتاج تطبيقك إلى جذب انتباه المستخدم بشكل عاجل في حالات معيّنة، مثل المنبّه الجاري أو المكالمة الواردة. في التطبيقات التي تستهدف الأجهزة التي تعمل في نظام التشغيل Android 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)
    }
}

عندما يشغِّل المستخدم تطبيقك للمرة الأولى، يظهر له ما يلي في شاشة نظام معلومات التطبيق:

صورة تعرض &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. مربع حوار النظام للإشعار طلب الحصول على إذن.

إذا وافق المستخدم على طلب الإذن، سيظهر قسم معلومات التطبيق في التطبيق بالشكل الموضَّح في الشكل 3:

صورة تعرض شاشة &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);