قد يحتاج تطبيقك إلى جذب انتباه المستخدم بشكل عاجل في حالات معيّنة، مثل منبّه مستمر أو مكالمة واردة. على الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android (المستوى 28 لواجهة برمجة التطبيقات) أو الإصدارات الأقدم، يمكنك التعامل مع ذلك من خلال تشغيل نشاط أثناء عمل التطبيق في الخلفية. يوضّح هذا المستند كيفية تحقيق هذا السلوك على الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android (المستوى 29 لواجهة برمجة التطبيقات) والإصدارات الأحدث.
إضافة إذن POST_NOTIFICATIONS
بدءًا من نظام التشغيل Android 13 (المستوى 33 لواجهة برمجة التطبيقات)، عليك تقديم بيان بشأن إذن
POST_NOTIFICATIONS في ملف AndroidManifest.xml:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
بعد الإفصاح عن الإذن، أنشئ قناة إشعارات.
إنشاء قناة إشعارات
أنشئ قناة إشعارات لعرض الإشعارات والسماح للمستخدمين بإدارة فئات الإشعارات في إعدادات النظام. لمزيد من المعلومات حول قنوات الإشعارات، يُرجى الاطّلاع على إنشاء قنوات الإشعارات وإدارتها.
أنشئ قنوات الإشعارات في طريقة onCreate الخاصة بفئة Application:
class MyApplication : 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:
إدارة أذونات الإشعارات
بدءًا من نظام التشغيل Android 13، يجب طلب أذونات الإشعارات قبل عرض الإشعارات للمستخدمين.
يوضّح مثال الرمز البرمجي التالي كيفية طلب إذن إرسال الإشعارات في وقت التشغيل باستخدام Jetpack Compose:
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 والإصدارات الأحدث، يؤدي النقر على الزر طلب الإذن إلى عرض مربّع حوار النظام الموضّح في الشكل 2:
عندما يمنح المستخدم الإذن، يعدّل النظام شاشة معلومات التطبيق، كما هو موضّح في الشكل 3:
إنشاء إشعار ذي أولوية قصوى
عند إنشاء إشعار ذي أولوية عالية، يجب تقديم عنوان واضح ونص رسالة واضح. حدِّد أيضًا قناة ذات أهمية عالية ومستوى أولوية.
يوضّح مثال الرمز البرمجي التالي كيفية ضبط إشعار ذي أولوية عالية وإنشائه:
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(0, notificationBuilder.build()) }
عرض الإشعار للمستخدم
يؤدي استدعاء الدالة showNotification إلى تشغيل الإشعار على النحو التالي:
Button(onClick = { showNotification() }) { Text(text = "Show notification") }
يوضّح الشكل 4 الإشعار ذو الأولوية القصوى الذي يعرضه النظام:
إشعار بنشاط مستمر في الخلفية
عند عرض الإشعار للمستخدم، يمكنه تأكيد استلام تنبيه تطبيقك أو تذكيره أو تجاهلهما. على سبيل المثال، يمكن للمستخدم قبول مكالمة هاتفية واردة أو رفضها.
إذا كان الإشعار يمثّل مهمة مستمرة تعمل في الخلفية، مثل مكالمة هاتفية نشطة، اربط الإشعار بخدمة تعمل في المقدّمة. يوضّح مقتطف الرمز التالي كيفية عرض إشعار مرتبط بخدمة تعمل في المقدّمة:
// Provide a unique integer for the "notificationId" of each notification. startForeground(notificationId, notification)
استخدام ميزة "آخر الأخبار مباشرةً"
يمكن أن تستفيد الإشعارات المستمرة الحساسة للوقت من زيادة مستوى ظهورها. ننصحك بالترويج للإشعارات الجارية على أنّها تحديثات فورية لعرض معلومات الحالة على جميع مساحات واجهة مستخدم النظام.