بدءًا من Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، تظهر شارات الإشعارات، المعروفة أيضًا باسم نقاط الإشعارات، على رمز مشغّل التطبيقات عندما يكون للتطبيق المرتبط إشعار نشط. يمكن للمستخدمين النقر مع الاستمرار على رمز التطبيق لعرض الإشعارات، بالإضافة إلى أي اختصارات للتطبيقات، كما هو موضّح في الشكل 1.
تظهر هذه النقاط تلقائيًا في تطبيقات المشغّلات المتوافقة معها، ولا يحتاج تطبيقك إلى تنفيذ أي إجراء. ومع ذلك، قد تكون هناك حالات لا تريد فيها ظهور نقطة الإشعار أو تريد التحكّم في الإشعارات التي تظهر فيها بالضبط.
إيقاف عرض الشارات
في بعض الحالات، لا تكون الشارات مناسبة للإشعارات، لذا
يمكنك إيقافها لكل قناة على حدة من خلال استدعاء
setShowBadge(false)
على عنصر NotificationChannel
.
على سبيل المثال، قد تحتاج إلى إيقاف شارات الإشعارات في الحالات التالية:
- الإشعارات المستمرة: لا يُنصح باستخدام الشارات مع معظم الإشعارات المستمرة، مثل معالجة الصور أو عناصر التحكّم في تشغيل الوسائط أو تعليمات التنقّل الحالية.
- تذكيرات "تقويم Google": تجنَّب وضع شارات على الأحداث التي تحدث في الوقت الحالي.
- أحداث الساعة أو المنبّه: تجنَّب إشعارات الشارات المرتبطة بالمنبّهات الحالية.
يوضّح الرمز البرمجي النموذجي التالي كيفية إخفاء الشارات لقناة إشعارات:
Kotlin
val id = "my_channel_01" val name = getString(R.string.channel_name) val descriptionText = getString(R.string.channel_description) val importance = NotificationManager.IMPORTANCE_LOW val mChannel = NotificationChannel(id, name, importance).apply { description = descriptionText setShowBadge(false) } val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(mChannel)
Java
String id = "my_channel_01"; CharSequence name = getString(R.string.channel_name); String description = getString(R.string.channel_description); int importance = NotificationManager.IMPORTANCE_LOW; NotificationChannel mChannel = new NotificationChannel(id, name, importance); mChannel.setDescription(description); mChannel.setShowBadge(false); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.createNotificationChannel(mChannel);
ضبط عدد الإشعارات المخصّصة
يضيف كل إشعار تلقائيًا رقمًا معروضًا في قائمة "اللمس مع الاستمرار"، كما هو موضّح في الشكل 1، ولكن يمكنك إلغاء هذا الرقم لتطبيقك. على سبيل المثال، قد يكون ذلك مفيدًا إذا كنت تستخدم إشعارًا واحدًا فقط لتمثيل رسائل جديدة متعددة ولكنك تريد أن يمثّل العدد مجموع الرسائل الجديدة.
لضبط رقم مخصّص، اتصل بالرقم
setNumber()
في الإشعار، كما هو موضّح هنا:
Kotlin
var notification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setContentTitle("New Messages") .setContentText("You've received 3 new messages.") .setSmallIcon(R.drawable.ic_notify_status) .setNumber(messageCount) .build()
Java
Notification notification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setContentTitle("New Messages") .setContentText("You've received 3 new messages.") .setSmallIcon(R.drawable.ic_notify_status) .setNumber(messageCount) .build();
تعديل رمز قائمة النقر مع الاستمرار في الإشعار
تعرِض قائمة "اللمس مع الاستمرار" الرمز الكبير أو الصغير المرتبط بأحد
الإشعارات، إذا كان متاحًا. يعرض النظام الرمز الكبير تلقائيًا، ولكن
يمكنك استدعاء
Notification.Builder.setBadgeIconType()
وإدخال الثابت BADGE_ICON_SMALL
لعرض الرمز الصغير.
Kotlin
var notification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setContentTitle("New Messages") .setContentText("You've received 3 new messages.") .setSmallIcon(R.drawable.ic_notify_status) .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL) .build()
Java
Notification notification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setContentTitle("New Messages") .setContentText("You've received 3 new messages.") .setSmallIcon(R.drawable.ic_notify_status) .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL) .build();
إخفاء اختصار مكرّر
إذا أنشأ تطبيقك إشعارًا يكرّر اختصار تطبيق، يمكنك
إخفاء الاختصار مؤقتًا عندما يكون الإشعار نشطًا من خلال استدعاء
setShortcutId()
.
للحصول على المزيد من نماذج الرموز البرمجية التي تستخدِم الإشعارات، يمكنك الاطّلاع على نموذج تطبيق SociaLite.