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

音频焦点的管理,这一点类似于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蓝牙开发音频焦点相关推荐

  1. Android 蓝牙开发(二) --手机与蓝牙音箱配对,并播放音频

    Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 上一章中,我们已经学习了传统蓝牙的开发,这一章,我们来学习如 ...

  2. Android蓝牙开发 — 经典蓝牙BLE蓝牙

    一,前期基础知识储备 1)蓝牙是一种支持设备之间短距离通信的无线电技术(其他还包括红外,WIFI): 支持移动电话.笔记本电脑.无线耳机等设备之间进行信息的交换: Android支持的蓝牙协议栈:Bl ...

  3. Android 蓝牙开发(扫描设备、绑定、解绑)Kotlin版

    Kotlin版 蓝牙开发 (扫描设备.绑定.解绑) 前言 运行效果图 正文 ① 配置项目 ② 布局和样式 ③ 编码 1. 通知栏样式修改 2. 蓝牙设备列表适配器编写 3. 权限请求 4. 初始化蓝牙 ...

  4. Android 蓝牙开发(扫描设备、绑定、解绑)

    Android 蓝牙开发(扫描设备.绑定.解绑) 前言 效果图 一.配置项目 二.布局和样式 三.编码 四.源码 前言 公司最近给我丢了一个蓝牙开发的项目,不了解怎么办呢,那当然是从最基础的开始了,所 ...

  5. Android 蓝牙开发(一) -- 传统蓝牙聊天室

    Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 一.蓝牙概览 以下是蓝牙的介绍,来自维基百科: 蓝牙(英语: ...

  6. Android蓝牙开发(一)蓝牙模块及核心API

    本文主要介绍Android蓝牙开发中基础知识:蓝牙模块及核心API. 关于蓝牙的连接及通讯功能实现,欢迎查阅下一篇文章:Android蓝牙开发(二)蓝牙消息传输实现. 蓝牙模块 从蓝牙4.0开始包含两 ...

  7. Android蓝牙开发系列文章-其实你的手机可以变成一个蓝牙音箱

    本文是蓝牙音频相关的第3篇文章,查阅其他内容,请点击<Android蓝牙开发系列文章-策划篇>. 目前a2dp相关的内容有: <Android蓝牙开发系列文章-AudioTrack播 ...

  8. 【Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )

    Android TV 开发系列文章目录 [Android TV 开发]安卓电视调试 ( 开启网络远程调试 ) [Android TV 开发]焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设 ...

  9. Android 蓝牙开发,申请打开蓝牙

    申请打开蓝牙 <!-- 蓝牙权限 --> <uses-permission android:name="android.permission.BLUETOOTH" ...

最新文章

  1. 【leetcode】二叉树与经典问题
  2. python引用传递的区别_python的值类型和引用类型及值传递和引用传递的区别
  3. [WinForm] VS2010发布、打包安装程序(超全超详细)
  4. 散列表删除一个元素c语言,分享一个简单高效的哈希表C语言实现
  5. 【Elasticsearch】Elasticsearch 分布式一致性原理分析:元数据
  6. 一 VC2008环境中ICE的配置
  7. CSAPP-C1-计算机系统漫游
  8. 正则表达式的贪婪与非贪婪模式
  9. excel2003出现“向程序发送命令时出现错误”解决方法
  10. js 阻止冒泡 在控件的 onxxx 事件中调用就可以阻止父控件也响应消息了
  11. OC_UISlider
  12. Atitit 传感器之道 1. 视觉传感器 摄像头 1 1.1. 一、光线传感器: 1 1.2. 二、距离传感器: 1 1.3.    第一种是震动传感器。 4 1.4.   第二种是声响传感
  13. NYOJ.904 search(二分查找,快速排序,结构体运用)
  14. Django出现Error: 111 connect to 192.168.158.141:22122. Connection refused
  15. 批量下载ERA5数据(Python+IDM)
  16. 驱动层SSDT 隐藏进程
  17. jupyter没有输出直接下一行
  18. box-shadow:单边阴影与多边阴影
  19. 什么是“this引用逸出”?
  20. CA、根证书、数字证书、数字证书颁发的流程

热门文章

  1. 全球各个国家名的英文
  2. MySQL5.7修改默认root密码
  3. hihoCoder 1039:字符消除(字符串处理)
  4. 宋鸿兵 - 货币战争5(2014年3月20日)
  5. zedboard运行linux,(转载)一步一步学ZedBoard Zynq(六):在ZedBoard上运行linux并编写linux下的应用程序HelloWorld...
  6. [问题未处理]-kubernetes报错request canceled (Client.Timeout exceeded while awaiting headers)
  7. 独立电子商务网站运营成本
  8. 键盘鼠标是计算机标准输入输出设备,微型计算机输入输出设备之键盘和鼠标(ppt 32页).ppt...
  9. 计算机术语pc是什么意思,pc_pc是什么意思-太平洋IT百科
  10. JTAG-SWD转接