إضافة إشعارات إلى تطبيق وسائط

عند إنشاء تطبيق وسائط يعالج الصوت أو الفيديو، من المهم استخدام قنوات الإشعارات والإشعارات الصحيحة. ويضمن ذلك توفّر الميزات القيّمة التالية:

  • إعطاء الأولوية للإشعارات
  • لا يمكن إغلاقها
  • استخدام سمات الصوت لنغمات الرنين

يمكنك استخدام "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 للتمييز بين إشعارات المكالمات والأنواع الأخرى من الإشعارات.