メディアアプリに通知を追加する

音声または動画を処理するメディアアプリを作成するときは、正しい通知と通知チャンネルを使用することが重要です。これにより、通知に次の価値ある機能を提供できます。

  • 通知の優先度を設定
  • 閉じることができない
  • 着信音にオーディオ属性を使用する

NotificationChannel.Builder を使用して、着信用とアクティブな通話用の 2 つの通知チャンネルをセットアップします。

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 を使用して着信通知を他のタイプの通知と区別する手順については、通話アプリの通話スタイル通知を作成するをご覧ください。