Я работаю над приложением с интеграцией софтфона, поэтому я пытаюсь воспроизвести мелодию звонка телефона по умолчанию при обнаружении входящего вызова. Проблема, с которой я столкнулся, заключается в том, что когда я подключаю несколько AirPods к своему Pixel 3, рингтон воспроизводится через телефон и AirPods. Звук, исходящий из телефона, регулируется громкостью звонка, а звук, поступающий через AirPods, регулируется громкостью мультимедиа. AirPods настроены для телефонных звонков и мультимедийного звука.
Я пробовал два разных подхода к этому, но оба в итоге дали одинаковый результат. Сначала я попытался использовать экземпляр MediaPlayer и установить для AudioAttributes значение AudioAttributes.USAGE_NOTIFICATION_RINGTONE:
val uri = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE)
val mp = MediaPlayer().also {
it.setAudioAttributes(AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.build())
it.setDataSource(this, uri)
it.prepare()
}
findViewById<AppCompatButton>(R.id.start).also { button ->
button.setOnClickListener {
mp.isLooping = true
mp.start()
}
}
findViewById<AppCompatButton>(R.id.stop).also { button ->
button.setOnClickListener {
mp.stop()
}
}
Я также попытался использовать метод RingtoneManager.getRinger ():
val uri = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE)
val ringer = RingtoneManager.getRingtone(this, uri)
findViewById<AppCompatButton>(R.id.start).also { button ->
button.setOnClickListener {
ringer.play()
}
}
findViewById<AppCompatButton>(R.id.stop).also { button ->
button.setOnClickListener {
ringer.stop()
}
}
Оба из этих подходов дает тот же результат, поэтому я не уверен, где отсюда go. Я бы хотел, чтобы звонок воспроизводился через подключенное устройство Bluetooth с использованием громкости звонка, аналогично тому, как происходит звонок оператора связи.