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

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

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

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

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