音声や動画を処理するメディアアプリを作成する場合は、 正しい通知と通知チャンネルを確認します。この 通知に次の重要な機能が含まれていることを確認します。
- 通知の優先度が設定されている
- 閉じることができない
- 着信音にオーディオ属性を使用する
NotificationChannel.Builder
を使用して、2 つの通知チャンネルを設定します。
もう 1 つはアクティブな通話用です。
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
を使用して着信通知を他のタイプの通知と区別する
通知を受け取れます。