הוספת התראות לאפליקציית מדיה

כשמפתחים אפליקציית מדיה שמעבדת אודיו או וידאו, חשוב להשתמש את ההתראות ואת ערוצי ההתראות הנכונים. הזה מבטיחה שההתראות כוללות את התכונות החשובות הבאות:

  • התראות בעדיפות גבוהה
  • הם לא ניתנים לסגירה
  • שימוש במאפייני אודיו לרנגטונים

משתמשים בשירות 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 כדי להבדיל בין התראות על שיחות לבין סוגים אחרים של התראות.