android音频焦点长期占有,AudioRequster 音频焦点监听问题

关于音频焦点监听需要找到对应的播放器音频时的相关参数一一对应才能获取到焦点的回调

import android.content.Context;

import android.content.Intent;

import android.media.AudioManager;

import android.os.Build;

import android.util.Log;

/**

* Created by Li on 2020/3/31.

* 音频焦点占用

*/

public class AudioFocusManager {

/**

* 用AudioManager获取音频焦点避免音视频声音并发问题

*/

private AudioManager mAudioManager;

private AudioManager.OnAudioFocusChangeListener mAudioFocusChangeListener;

//zxzhong 请求音频焦点 设置监听

public int requestTheAudioFocus(final AudioListener audioListener) {

if (Build.VERSION.SDK_INT < 8) {//Android 2.2开始(API8)才有音频焦点机制

return 0;

}

if (mAudioManager == null) {

mAudioManager = (AudioManager) AppApplication.Companion.getContext().getSystemService(Context.AUDIO_SERVICE);

}

if (mAudioFocusChangeListener == null) {

mAudioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {//监听器

@Override

public void onAudioFocusChange(int focusChange) {

switch (focusChange) {

case AudioManager.AUDIOFOCUS_GAIN:

case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT:

case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:

//播放操作

audioListener.start();

break;

case AudioManager.AUDIOFOCUS_LOSS:

case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:

case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:

//暂停操作

audioListener.pause();

break;

default:

break;

}

}

};

}

// type: STREAM_RING AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK

// 参数一/二/三 都必须跟播放音频时 一 一 对应

//主要是这里 *************************************************

int requestFocusResult = mAudioManager.requestAudioFocus(mAudioFocusChangeListener,

AudioManager.STREAM_MUSIC,//AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK

AudioManager.AUDIOFOCUS_GAIN);//AUDIOFOCUS_GAIN_TRANSIENT

Log.w("audioFocus"," requestFocusResult = "+requestFocusResult+" AUDIOFOCUS "+AudioManager.AUDIOFOCUS_REQUEST_GRANTED);

return requestFocusResult;

}

//zxzhong 暂停、播放完成或退到后台释放音频焦点

public void releaseTheAudioFocus() {

if (mAudioManager != null && mAudioFocusChangeListener != null) {

mAudioManager.abandonAudioFocus(mAudioFocusChangeListener);

}

}

public interface AudioListener{

void start();

void pause();

}

public void pauseMusic(Context context) {//暂停

Intent freshIntent = new Intent();

freshIntent.setAction("com.android.music.musicservicecommand.pause");

freshIntent.putExtra("command", "pause");

context.sendBroadcast(freshIntent);

}

public void playCurrentMusic(Context context){//继续播放

Intent freshIntent = new Intent();

freshIntent.setAction("com.android.music.musicservicecommand");

freshIntent.putExtra("command", "togglepause");

context.sendBroadcast(freshIntent);

}

}

本文地址:https://blog.csdn.net/qq_32216895/article/details/107471787

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值