Android蓝牙开发音频焦点

在车机开发中,蓝牙模块一般是定制的,而蓝牙的音频输出,包括蓝牙电话,蓝牙音乐,都要制定声音策略,进行音频焦点的管理。

音频焦点的管理,这一点类似于android多媒体开发时的音频焦点管理,也是通过AudioManager来进行管理。


音频焦点管理的主要代码,一般写在主服务里即可,便于统筹管理。


以蓝牙音乐为例(蓝牙电话的类似),稍作说明:


/** 蓝牙音乐的音频管理类实例 */

private AudioManager amMusic;


/**蓝牙音乐的音频焦点监听器 */

private OnAudioFocusChangeListener mAudioFocusListener ;


/** 蓝牙音乐声音焦点 是否丢失的标识位*/
public static boolean musicLostFocuse = true;


在主服务初始化的时候,对amMusic进行初始化:

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


然后初始化音频焦点监听器:

/**实现音频焦点监听器,如果有其他竞争者一起争夺AudioFocus,通过监听AudioFocus,自己这方做出相应的变化*/
 mAudioFocusListener = new OnAudioFocusChangeListener() {

@Override

public void onAudioFocusChange(int focusChange) {

switch (focusChange) {

case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK):

// 暂时失去AudioFocus,但是可以继续播放,降低音量

LogUtil.i(TAG, "---------------------混音------------------------");

musicLostFocuse = true;

break;

case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT):

// 暂时失去AudioFocus,暂停音乐

LogUtil.i(TAG, "---------------------暂时失去焦点,暂停播放------------------------");

musicLostFocuse = true;

//执行暂停蓝牙音乐的逻辑

musicPause();

break;

case (AudioManager.AUDIOFOCUS_LOSS):

// 长时间失去了焦点 可以停止音乐

LogUtil.i(TAG, "---------------------失去了焦点 ,可以停止播放------------------------");

musicLostFocuse = true;

//执行停止蓝牙音乐的逻辑

musicStop();

break;

case (AudioManager.AUDIOFOCUS_GAIN):

// 获得了Audio Focus 长焦点

LogUtil.i(TAG, "---------------------获取了长焦点,播放----------------------");

musicLostFocuse = false;

musicPlay();

break;

}

}

};


再然后就是封装申请焦点的方法和释放焦点的方法:

/** 申请焦点方法*/

public int musicRequestAudioFocus() {

int result = 0; //result是返回值,表示申请的结果,0代表失败,1代表成功

result = amMusic.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);

if (result == 1) {

musicLostFocuse = false;

}

LogUtil.d(TAG, "musicRequestAudioFocus------------------result====" + result);

return result;

}


 /** 释放焦点方法*/

 public void abandonMusicFocus() {

amMusic.abandonAudioFocus(mAudioFocusListener);

LogUtil.d(TAG, "abandonAudioFocus");

}


最后就是根据业务逻辑,在需要申请焦点的地方调用申请焦点的方法,在需要释放焦点的地方调用释放焦点的方法即可。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值