700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Anddroid IM来电铃声通过耳机播放

Anddroid IM来电铃声通过耳机播放

时间:2019-05-17 09:32:34

相关推荐

Anddroid  IM来电铃声通过耳机播放

针对问题:使用云信IM, 带耳机时,来电铃声还是会外放

本文主要内容

1.如何通过耳机播放来电铃声

2.如果来电铃声播放之前,耳机播放音乐,如何解决铃声和音乐同时播放的问题

问题一:

首先云信IM来电铃声是通过AVChatSoundPlayer来播放的,

解决外放问题,需要将SoundPool初始化的传参从AudioManager.STREAM_RING改成AudioManager.STREAM_MUSIC

因为系统铃声模式,默认就是外放的

而音乐模式,连接了耳机会通过耳机播放铃声

代码

private void initSoundPool() {stop();if (soundPool == null) {soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);soundPool.setOnLoadCompleteListener(onLoadCompleteListener);audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);ringMode = audioManager.getRingerMode();}registerVolumeReceiver(true);}

问题二:

如果来电之前,耳机播放音乐,

我们可以通过设置当前AudioManager获取焦点

当铃声播放时,我们就能停止音乐,或者音乐作为背景音播放

设置代码

audioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);

参数1:OnAudioFocusChangeListener我们没有焦点监听需求,直接传null

参数2:streamType哪种音频类型获取焦点(因为我们SoundPool使用了STREAM_MUSIC我们这里也指定STREAM_MUSIC类型)

参数3:获取焦点的音频通过哪种方式播放(请参考文末属性表)

如果通话完成,或者拒绝接听后,还想继续自动播放耳机的音乐

可以通过

audioManager.abandonAudioFocus(null);

放弃音频焦点。使上一个焦点所有者(如果有)接收焦点,这样音乐就会自动播放了

参数也是OnAudioFocusChangeListener

我修改的完整代码

public void stop() {LogUtil.d(TAG, "stop");if (soundPool != null) {if (streamId != 0) {soundPool.stop(streamId);streamId = 0;}if (soundId != 0) {soundPool.unload(soundId);soundId = 0;}}if (isRingModeRegister) {registerVolumeReceiver(false);}if (audioManager != null) {audioManager.abandonAudioFocus(null);}}private void initSoundPool() {stop();if (soundPool == null) {soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);soundPool.setOnLoadCompleteListener(onLoadCompleteListener);audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);ringMode = audioManager.getRingerMode();}audioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);registerVolumeReceiver(true);}

代码中audioManager != null判断,是因为第一次进来audioManager还没有创建,会报错。

下表就是对应的几种类型

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。