إضافة إشعارات إلى تطبيق وسائط
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
عند إنشاء تطبيق وسائط يعالج الصوت أو الفيديو، من المهم استخدام
الإشعارات وقنوات الإشعارات الصحيحة هذا النمط
يضمن توفُّر الميزات القيّمة التالية للإشعارات:
- أن تكون الأولوية للإشعار
- لا يمكن إغلاقها
- استخدام سمات الصوت لنغمات الرنين
يمكنك استخدام "NotificationChannel.Builder
" لإعداد قناتَين للإشعارات: إحداهما
المكالمات الواردة والأخرى للمكالمات النشطة.
internal companion object {
const val TELECOM_NOTIFICATION_ID = 200
const val TELECOM_NOTIFICATION_ACTION = "telecom_action"
const val TELECOM_NOTIFICATION_INCOMING_CHANNEL_ID = "telecom_incoming_channel"
const val TELECOM_NOTIFICATION_ONGOING_CHANNEL_ID = "telecom_ongoing_channel"
private val ringToneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)
}
لعرض الإشعار في كل مكان والسماح له بتشغيل صوت
نغمة رنين، لضبط أهمية قناة الإشعارات الواردة على "عالية".
val incomingChannel = NotificationChannelCompat.Builder(
TELECOM_NOTIFICATION_INCOMING_CHANNEL_ID,
NotificationManagerCompat.IMPORTANCE_HIGH,
).setName("Incoming calls")
.setDescription("Handles the notifications when receiving a call")
.setVibrationEnabled(true).setSound(
ringToneUri,
AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setLegacyStreamType(AudioManager.STREAM_RING)
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE).build(),
).build()
فقط المكالمات النشطة تتطلب ضبط الأهمية على الإعداد التلقائي. يمكنك استخدام
اتباع نمط المكالمات الواردة للسماح بإرسال إشعارات المكالمات الواردة
غير قابل للرفض.
val ongoingChannel = NotificationChannelCompat.Builder(
TELECOM_NOTIFICATION_ONGOING_CHANNEL_ID,
NotificationManagerCompat.IMPORTANCE_DEFAULT,
)
.setName("Ongoing calls")
.setDescription("Displays the ongoing call notifications")
.build()
لمعالجة حالات الاستخدام التي يتم فيها قفل جهاز المستخدم أثناء مكالمة واردة،
استخدام إشعار بملء الشاشة لعرض نشاط للسماح للمستخدم
الرد على المكالمة.
// on the notification
val contentIntent = PendingIntent.getActivity(
/* context = */ context,
/* requestCode = */ 0,
/* intent = */ Intent(context, TelecomCallActivity::class.java),
/* flags = */ PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,
)
يُرجى الاطّلاع على مقالة إنشاء إشعار نمط المكالمات لتطبيقات الاتصال للحصول على تعليمات بشأن
استخدام CallStyle
لتمييز إشعارات المكالمات عن الأنواع الأخرى من
الإشعارات.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Add notifications to a media app\n\nWhen building a media app that processes audio or video, it's important to use\nthe correct notifications and notification channels. This\nensures that notifications have the following valuable features:\n\n- Have notification priority\n- Are non-dismissable\n- Use audio attributes for ringtones\n\nUse `NotificationChannel.Builder` to set up two notification channels: one for\nincoming calls and the other for active calls. \n\n internal companion object {\n const val TELECOM_NOTIFICATION_ID = 200\n const val TELECOM_NOTIFICATION_ACTION = \"telecom_action\"\n const val TELECOM_NOTIFICATION_INCOMING_CHANNEL_ID = \"telecom_incoming_channel\"\n const val TELECOM_NOTIFICATION_ONGOING_CHANNEL_ID = \"telecom_ongoing_channel\"\n\n private val ringToneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)\n }\n\nTo display the notification everywhere and allow it to play audio for the\nringtone, set the importance of the incoming notification channel to high. \n\n val incomingChannel = NotificationChannelCompat.Builder(\n TELECOM_NOTIFICATION_INCOMING_CHANNEL_ID,\n NotificationManagerCompat.IMPORTANCE_HIGH,\n ).setName(\"Incoming calls\")\n .setDescription(\"Handles the notifications when receiving a call\")\n .setVibrationEnabled(true).setSound(\n ringToneUri,\n AudioAttributes.Builder()\n .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)\n .setLegacyStreamType(AudioManager.STREAM_RING)\n .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE).build(),\n ).build()\n\nOnly active calls requires the importance to be set to default. Use the\nfollowing incoming call style to allow notifications for incoming calls to be\nnon-dismissable. \n\n val ongoingChannel = NotificationChannelCompat.Builder(\n TELECOM_NOTIFICATION_ONGOING_CHANNEL_ID,\n NotificationManagerCompat.IMPORTANCE_DEFAULT,\n )\n .setName(\"Ongoing calls\")\n .setDescription(\"Displays the ongoing call notifications\")\n .build()\n\nTo address use cases where the user's device is locked during an incoming call,\nuse a full-screen notification to display an activity to allow the user to\nanswer the call. \n\n // on the notification\n val contentIntent = PendingIntent.getActivity(\n /* context = */ context,\n /* requestCode = */ 0,\n /* intent = */ Intent(context, TelecomCallActivity::class.java),\n /* flags = */ PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n )\n\nRead [Create a call style notification for call apps](/develop/ui/views/notifications/call-style) for instructions on\nusing [`CallStyle`](/reference/android/app/Notification.CallStyle) to distinguishing call notifications from other types of\nnotifications."]]