Tworząc aplikację do multimediów, która przetwarza dźwięk lub obraz, używaj odpowiednich kanałów powiadomień i powiadomień. Dzięki temu powiadomienia będą miały następujące przydatne funkcje:
- Priorytet powiadomień
- nie można ich zamknąć,
- Używaj atrybutów audio w przypadku dzwonków
Za pomocą NotificationChannel.Builder
skonfiguruj 2 kanały powiadomień: jeden dla połączeń przychodzących i drugi dla aktywnych połączeń.
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)
}
Aby powiadomienie było wyświetlane wszędzie i zezwolić na odtwarzanie dźwięku dzwonka, ustaw wagę kanału powiadomień przychodzących na wysokie.
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()
Tylko aktywne połączenia wymagają ustawienia ważności na wartość domyślną. Aby nie można było zamknąć powiadomień o połączeniach przychodzących, użyj tego stylu połączenia przychodzącego.
val ongoingChannel = NotificationChannelCompat.Builder(
TELECOM_NOTIFICATION_ONGOING_CHANNEL_ID,
NotificationManagerCompat.IMPORTANCE_DEFAULT,
)
.setName("Ongoing calls")
.setDescription("Displays the ongoing call notifications")
.build()
W przypadku, gdy urządzenie użytkownika jest zablokowane podczas połączenia przychodzącego, użyj powiadomienia pełnoekranowego, aby wyświetlić aktywność, która umożliwi użytkownikowi odebranie połączenia.
// 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,
)
Przeczytaj artykuł Tworzenie powiadomień o stylu połączeń dla aplikacji do wykonywania połączeń, aby dowiedzieć się, jak za pomocą CallStyle
odróżniać powiadomienia o połączeniach od innych typów powiadomień.