Android蓝牙开发音频焦点
来源:互联网 发布:淘宝怎么刷销量安全 编辑:程序博客网 时间:2024/06/10 07:07
在车机开发中,蓝牙模块一般是定制的,而蓝牙的音频输出,包括蓝牙电话,蓝牙音乐,都要制定声音策略,进行音频焦点的管理。
音频焦点的管理,这一点类似于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");
}
最后就是根据业务逻辑,在需要申请焦点的地方调用申请焦点的方法,在需要释放焦点的地方调用释放焦点的方法即可。
- Android蓝牙开发音频焦点
- Android蓝牙开发【七】hfp音频连接
- Android音频焦点
- Android---管理音频焦点
- Android 获取音频焦点
- Android---管理音频焦点
- Android 音频焦点
- Android音频焦点
- Android音频焦点
- android音频焦点
- Android开发之Mediaplayer状态转换图及音频焦点
- Android开发之Mediaplayer状态转换图及音频焦点
- Android 蓝牙开发(七)hfp音频连接
- Android官方开发文档Training系列课程中文版:管理音频播放之管理音频焦点
- Android 音频焦点(Audio Focus)
- Android 音频焦点(Audio Focus)
- Android 音频焦点(Audio Focus)
- Android 处理音频焦点 AudioFocus
- 弗徕威发布维拉3代服务机器人,B2B2C模式带来产品功能蜕变
- 以太坊代币开发计算调用一个合约方法需要消耗多少gas
- SpringMvc的Common- upload的MutilpartFile转换为io.File--进行Excel文件上传
- PHP中用cURL实现get和post请求
- RPC和MQ对比及其适用/不适用场合
- Android蓝牙开发音频焦点
- 【收集贴收集】某大牛的博客JS系列和C#系列
- 唯快不破:为何TCP/IP协议栈设计成沙漏型的
- 每天回顾linux命令(chown)
- 修复每个 bug 后都要问这 3 个问题
- IDEA报Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA
- 几百个业务员的销售分析,你的Excel还够用吗?
- Mycat之——日志报Unknown charsetIndex:224错误
- Intel格式与Motorola格式的区别