我正在开发一个与软电话集成的应用程序,因此我试图在检测到来电时播放手机的默认铃声。我遇到的问题是,当我将一些 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()
}
}
这两种方法都产生相同的结果,所以我不确定从这里去哪里。我想得到它,以便使用铃声音量通过连接的蓝牙设备播放铃声,类似于运营商呼叫的方式。