Android: 如何切换 SCO 链路。
最近在做蓝牙音箱开发,在 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 链路。相关推荐
- Android开发切换host应用
Android开发切换host应用 由于在工作过程中常需要切换手机的host来测试不同服务器上的接口,所以想到需要这么个软件. SwitchHost在PC上是一款很好用的修改Host的软件,手机上也需 ...
- android activity切换动画
今天,实在没有什么可以写的内容,在网上找了好久,才决定写今天的内容.自己还是想保持每天写博客的习惯. 在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左 ...
- Android选项切换条SHSegmentControl
Android选项切换条SHSegmentControl SHSegmentControl是github上一个开源的选项切换条,其样式如图所示: SHSegmentControl在github上 ...
- java 切换后台程序_将 Android 程序切换到后台及从后台切换到前台实现
将 Android 程序切换到后台及从后台切换到前台实现 有时候, 我们需要将自己的 Android 程序切换到后台运行, 在必要时, 将其切换到前台运行下面提供了一种实现方式, 首先需要引用三个单元 ...
- android 应用切换动画,怎么在Android应用中利用Activity对动画进行切换
怎么在Android应用中利用Activity对动画进行切换 发布时间:2020-11-27 16:19:53 来源:亿速云 阅读:107 作者:Leah 今天就跟大家聊聊有关怎么在Android应用 ...
- android activity滑动切换,Android 向右滑动切换Activity, 随着手势的滑动而滑动的效果...
[实例简介] Android 向右滑动切换Activity, 随着手势的滑动而滑动的效果,项目详情http://blog.csdn.net/xiaanming/article/details/2093 ...
- Android audio切换设备通道流程(二十八)
Android audio切换设备通道流程 1.frameworks/base/media/java/android/media/AudioManager.java public void setMo ...
- android 错误中英互译,Android 中英文切换及遇到的问题
Android 中英文切换及遇到的问题 背景:近期由于项目上的需求接受到了一个中英文切换需求.只需要在切换中英系统语言的时候改变app的名称为中文或英文就可以.关于如何实现这些可以参考如下文章: 实现 ...
- Android 中英文切换及遇到的问题
Android 中英文切换及遇到的问题 背景:近期由于项目上的需求接受到了一个中英文切换需求.只需要在切换中英系统语言的时候改变app的名称为中文或英文就可以.关于如何实现这些可以参考如下文章: 实现 ...
最新文章
- 如何进行图片的平移,滚卷?
- Android 之View绘图原理总结
- 获得picker选项的当前年月值_如果你用OPPO手机!千万记得开启开发者选项,手机性能大幅度提升...
- 基于 C++ POCO 库封装的异步多线程的 CHttpClient 类
- luogu1082 [NOIp2012]同余方程 (扩展欧几里得)
- Python关键点常识
- matlab结构体构建,matlab 怎么建立结构体数组?
- Ubuntu下emacs使用搜狗输入法
- struts(二)——struts框架实现的基本原理
- 252个基本词根详解
- Windows 好用的软件安装清单 持续更新
- 如何使用CE来修改游戏并制作一个修改器
- stm32 hid 双向通信
- 管理学十大经典图书推荐
- Qt刷新UI界面问题
- 上海迪士尼度假区推出冬季节庆新体验
- 生鲜商城系统如何营销?
- 【云计算与虚拟化】第三章 实验二 在ESXi主机中安装操作系统
- 3d max 2008 试用版下载
- 带GPS的SLAM数据集汇总