Method to create a Notification Channel
private fun createChannel(notificationManager: NotificationManager) {
val uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)
val audioAttributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setLegacyStreamType(AudioManager.STREAM_RING)
.build()
val incomingPhoneCallChannel = NotificationChannel(
mNotificationManager.INCOMING_PHONE_CALL_CHANNEL_ID, "Incoming phone call",
NotificationManager.IMPORTANCE_HIGH
).apply {
setSound(uri, audioAttributes)
vibrationPattern = mNotificationManager._VIBRATION_PATTERN
enableVibration(true)
}
notificationManager.createNotificationChannel(incomingPhoneCallChannel)
}
Method to notify about the call
override fun notify(context: Context) {
val notificationManager = mNotificationManager.notificationManager
val notificationChannel = notificationManager.getNotificationChannel(mNotificationManager.INCOMING_PHONE_CALL_CHANNEL_ID)?: createChannel(notificationManager)
val contentTitle = "Incoming Call"
val contentIntent = Intent(context, PhoneCallReceiver::class.java)
val pendingIntent =
PendingIntent.getBroadcast(context, 0, contentIntent, PendingIntent.FLAG_IMMUTABLE)
val ringtone =RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)
var builder = NotificationCompat.Builder(
context,
mNotificationManager.INCOMING_PHONE_CALL_CHANNEL_ID
)
.setContentTitle(contentTitle)
.setContentIntent(pendingIntent)
.setContentText("phone call")
.setColor(ContextCompat.getColor(context, R.color.ic_launcher_background))
.setCategory(NotificationCompat.CATEGORY_CALL)
.setPriority(NotificationCompat.PRIORITY_MAX)
.setAutoCancel(true)
.setSmallIcon(R.drawable.ic_phone_black_24dp)
.setOngoing(true)
.setSound(ringtone)
builder.setVibrate(mNotificationManager._VIBRATION_PATTERN
val notification = builder.build()
notification.flags = Notification.FLAG_INSISTENT
notificationManager.notify("Incoming Call", mId, notification)
}
The above code does give me notification with a default notification that sounds like a single "TING!!". It doesn't change the sound even if I select different Ringtones from the notification channel settings and doesn't vibrate at all.
It was not the error in code posted above && works fine. But somewhere else, the AudioManager mode was set to MODE_IN_COMMUNICATION before the incoming call was accepted. This will make the android audio system to behave like you are already in a VOIP audio/video call. Hence just the "TING!!" and no vibration. Changing the AudioManager mode to MODE_NORMAL before the call was accepted worked for me.