我正在开发一个具有软件电话集成功能的应用程序,因此我试图在检测到来电时播放电话的默认铃声。我遇到的问题是,当我将某些AirPods连接到我的Pixel 3时,手机和AirPods会播放铃声。来自电话的声音由Ring音量控制,而通过AirPods发出的声音由Media音量控制。 AirPods用于电话和媒体音频的设置。
我尝试了2种单独的方法来实现,但是最终都得到相同的结果。首先,我尝试使用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()
}
}
这两种方法都产生相同的结果,因此我不确定从何而来。我想获得它,以便使用铃声音量通过连接的蓝牙设备播放铃声,类似于运营商呼叫的发出方式。