我正在开发一个 Voip 应用程序,我有一个极端情况,我想同时播放两个原始文件。
当我的应用程序有来电时,我正在创建一个新的 Mediaplayer 并播放自定义铃声。当我收到一个传入的 GSM 呼叫后不久,我会创建一个新的媒体播放器并播放敲门声,以向用户反馈还有一个 GSM 呼叫传入。同时我希望自定义铃声继续播放。
private fun setAudioAttributesForFile(audioUsage: Int): AudioAttributes {
return AudioAttributes.Builder()
.setUsage(audioUsage)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
}
private fun startRingtone(fileToPlay: Int): MediaPlayer {
return MediaPlayer().apply {
reset()
if (fileToPlay == R.raw.ring {
setAudioAttributes(setAudioAttributesForFile(AudioAttributes.USAGE_NOTIFICATION_RINGTONE))
} else {
setAudioAttributes(setAudioAttributesForFile(AudioAttributes.USAGE_MEDIA))
}
isLooping = true
Main.get().resources.openRawResourceFd(fileToPlay).use {
setDataSource(
it.fileDescriptor,
it.startOffset,
it.length
)
}
setOnPreparedListener { start() }
prepareAsync()
}
}
我在这段代码中遇到的问题是,一旦敲门声正在播放,系统就会将铃声静音,并且一旦敲门声停止,铃声就会继续。
我也尝试过:
仅使用
AudioAttributes.USAGE_NOTIFICATION_RINGTONE. 一旦敲门声开始播放,两个媒体播放器都会静音。如果我离开
setAudioAttributes()电话并将这四行替换为
if (fileToPlay == R.raw.ring) {
setAudioAttributesForFile(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
} else {
setAudioAttributesForFile(AudioAttributes.USAGE_MEDIA)
}
然后我可以同时播放这两个文件。那么问题是铃声文件没有显示为铃声,而是仅显示为媒体文件。因此,当我增加和减少铃声的音量时,标志不会显示它是铃声。
有没有办法将一种声音作为铃声播放,而另一种声音作为正常的媒体声音播放?
提前致谢。任何帮助表示赞赏。