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

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

إذا كان جهازك يعمل بالإصدار 13 من نظام التشغيل Android، سيؤدي النقر على الزر 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);