最近在做蓝牙音箱开发,在 A2DP 和 HFP 来回切换的时候,遇到了手机兼容性的问题。最终发现设备收声和手机收声,是因为 soc 切换有问题。原先在网上找了一些资料发现其实还蛮简单的。就两句话,当时没想这么多就直接写了,发现还真能从设备收声,然后就没管了。然后客户反馈很多手机不能从设备收声,尤其是三星、华为最为严重。好吧,查了很多资料,同时跟嵌入式开发对代码。 SOC 都连接上了,还是不行。最终发现手机在切换的时候,需要设置 AudioManager 的模式:

  • MODE_NORMAL : 普通模式,既不是铃声模式也不是通话模式
  • MODE_RINGTONE : 铃声模式
  • MODE_IN_CALL : 通话模式
  • MODE_IN_COMMUNICATION : 通信模式,包括音/视频,VoIP通话.(3.0加入的,与通话模式类似)

1、开启 SCO 录音

public void startSCO() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {mAudioManager.setMode(AudioManager.MODE_IN_CALL);} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {mAudioManager.setMode(AudioManager.MODE_IN_CALL);}if (mAudioManager.isBluetoothScoOn()) {if (mAliRecorderManager != null) {if (!isStartRecord){mAliRecorderManager.startTalk();}}return;}try {mAudioManager.setBluetoothScoOn(true);mAudioManager.startBluetoothSco();} catch (NullPointerException e) {e.printStackTrace();}IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED);BroadcastReceiver receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {int state = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1);if (AudioManager.SCO_AUDIO_STATE_CONNECTED == state) {if (mAliRecorderManager != null) {if (!isStartRecord){mAliRecorderManager.startTalk();}}ca.unregisterReceiver(this);}}};ca.registerReceiver(receiver, intentFilter);}

2、关闭 SOC 录音

public void stopSCO() {mAudioManager.setMode(AudioManager.MODE_NORMAL);if (mAudioManager.isBluetoothScoOn()) {mAudioManager.setBluetoothScoOn(false);mAudioManager.stopBluetoothSco();}}

Android: 如何切换 SCO 链路。相关推荐

  1. Android开发切换host应用

    Android开发切换host应用 由于在工作过程中常需要切换手机的host来测试不同服务器上的接口,所以想到需要这么个软件. SwitchHost在PC上是一款很好用的修改Host的软件,手机上也需 ...

  2. android activity切换动画

    今天,实在没有什么可以写的内容,在网上找了好久,才决定写今天的内容.自己还是想保持每天写博客的习惯. 在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左 ...

  3. Android选项切换条SHSegmentControl

     Android选项切换条SHSegmentControl SHSegmentControl是github上一个开源的选项切换条,其样式如图所示: SHSegmentControl在github上 ...

  4. java 切换后台程序_将 Android 程序切换到后台及从后台切换到前台实现

    将 Android 程序切换到后台及从后台切换到前台实现 有时候, 我们需要将自己的 Android 程序切换到后台运行, 在必要时, 将其切换到前台运行下面提供了一种实现方式, 首先需要引用三个单元 ...

  5. android 应用切换动画,怎么在Android应用中利用Activity对动画进行切换

    怎么在Android应用中利用Activity对动画进行切换 发布时间:2020-11-27 16:19:53 来源:亿速云 阅读:107 作者:Leah 今天就跟大家聊聊有关怎么在Android应用 ...

  6. android activity滑动切换,Android 向右滑动切换Activity, 随着手势的滑动而滑动的效果...

    [实例简介] Android 向右滑动切换Activity, 随着手势的滑动而滑动的效果,项目详情http://blog.csdn.net/xiaanming/article/details/2093 ...

  7. Android audio切换设备通道流程(二十八)

    Android audio切换设备通道流程 1.frameworks/base/media/java/android/media/AudioManager.java public void setMo ...

  8. android 错误中英互译,Android 中英文切换及遇到的问题

    Android 中英文切换及遇到的问题 背景:近期由于项目上的需求接受到了一个中英文切换需求.只需要在切换中英系统语言的时候改变app的名称为中文或英文就可以.关于如何实现这些可以参考如下文章: 实现 ...

  9. Android 中英文切换及遇到的问题

    Android 中英文切换及遇到的问题 背景:近期由于项目上的需求接受到了一个中英文切换需求.只需要在切换中英系统语言的时候改变app的名称为中文或英文就可以.关于如何实现这些可以参考如下文章: 实现 ...

最新文章

  1. 如何进行图片的平移,滚卷?
  2. Android 之View绘图原理总结
  3. 获得picker选项的当前年月值_如果你用OPPO手机!千万记得开启开发者选项,手机性能大幅度提升...
  4. 基于 C++ POCO 库封装的异步多线程的 CHttpClient 类
  5. luogu1082 [NOIp2012]同余方程 (扩展欧几里得)
  6. Python关键点常识
  7. matlab结构体构建,matlab 怎么建立结构体数组?
  8. Ubuntu下emacs使用搜狗输入法
  9. struts(二)——struts框架实现的基本原理
  10. 252个基本词根详解
  11. Windows 好用的软件安装清单 持续更新
  12. 如何使用CE来修改游戏并制作一个修改器
  13. stm32 hid 双向通信
  14. 管理学十大经典图书推荐
  15. Qt刷新UI界面问题
  16. 上海迪士尼度假区推出冬季节庆新体验
  17. 生鲜商城系统如何营销?
  18. 【云计算与虚拟化】第三章 实验二 在ESXi主机中安装操作系统
  19. 3d max 2008 试用版下载
  20. 带GPS的SLAM数据集汇总

热门文章

  1. linux (ubuntu)安装包安装sublime
  2. 将java项目部署到腾讯云服务器
  3. 免费天气查询工具类源码,开箱即用,根据中国气象局API编写。高效稳定
  4. 必备的Word软件应用技巧
  5. 打印一年内任意月份的日历(C语言)
  6. 电脑桌面文件不见了怎么恢复?
  7. 云计算机手机apple,云电脑IOS版怎么在苹果IOS手机上使用教程
  8. strcmp, strncmp和memcmp的区别
  9. 安卓一键清理内存_安卓的手机内存清理来啦……
  10. 小米红米手机通用解锁教程|红米Note8 Pro解锁教程,获取解锁码一键解锁BL的方法