第三方音乐暂停与恢复

最近遇到一个需求:app在播放语音或者视频,或者拨打网络电话的时候,如果正在播放音乐:比如酷狗,网易。需要暂停播放的音乐,当语音播放完以后又继续播放。

先奉上简单链接:https://download.csdn.net/download/qq_25238883/11258226

上代码:

1.获取到音频服务

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

2.在需要暂停的地方抢占播放通道

int ohterAppMusicVolume=0;

/**
 * 请求音频焦点,开始播放时候调用
 *
 * @return
 */
public boolean requestAudioFocus() {
    ohterAppMusicVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
    if (Build.VERSION.SDK_INT < 23) {
        audioManager.setMode(AudioManager.MODE_IN_CALL);
    }
    return audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
            AudioManager.AUDIOFOCUS_GAIN_TRANSIENT) == AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
}

3.占用结束的时候在取消占用

/**
 * 放弃音频焦点,销毁播放时候调用
 */
public void abandonAudioFocus() {
    audioManager.abandonAudioFocus(this);
    audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, ohterAppMusicVolume, 0);
}

代码很简单,目前酷狗,网易云都可以正常暂停与恢复

下面再补充一点:第三方音乐正在播放的时候,接收到新消息:在不暂停当前音乐播放的情况下,让第三方音乐声音减小,播放完提示音后恢复

 

1.同样是需要拿到媒体播放焦点

private AudioManager mAudioManager;
private int ohterAppMusicVolume=0;

private boolean requestAudioFocus() {
    mAudioManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
        ohterAppMusicVolume=mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        Log.e("音量", "requestAudioFocus: "+ohterAppMusicVolume );
        if (Build.VERSION.SDK_INT <= 23) {
            mAudioManager.setMode(AudioManager.STREAM_RING);
        }
        return mAudioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
                AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK ) == AudioManager.AUDIOFOCUS_REQUEST_GRANTED;

}

2.设置播放铃声:本地raw文件夹内mp3文件

MediaPlayer player= MediaPlayer.create(MainActivity.this,R.raw.ring);
player.start();
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        abandonAudioFocus();
        mp.release();
    }
});

3.解除占用

/**
 * 放弃音频焦点,销毁播放时候调用
 */
public void abandonAudioFocus() {
    mAudioManager.abandonAudioFocus(this);
    mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, ohterAppMusicVolume, 0);
}

 

两者的区别主要是在requestAudioFocus()方法中:

1.AudioManager.AUDIOFOCUS_GAIN_TRANSIENT//表示暂用

2.AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK  //表示会减小音量播放

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值