android播放语音,切换听筒模式遇到的问题

2016年09月18日 15:14:40 Jessehuyang 阅读数:4943 标签: android

在android5.0以上我们设置听筒模式audioManager.setMode(AudioManager.MODE_IN_CALL)没有效果;后来各种查阅资料,发现android5.0以上Google官方文档推荐使用 
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);

直接上切换代码:

/*** 设置语音播放的模式* @param ctx* @param mode*/
public void setAudioMode(Context ctx, int mode) {if (mode != AudioManager.MODE_NORMAL && mode != AudioManager.MODE_IN_COMMUNICATION) {return;}AudioManager audioManager = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE);if (mode == AudioManager.MODE_NORMAL) {audioManager.setSpeakerphoneOn(true);//打开扬声器} else if (mode == AudioManager.MODE_IN_COMMUNICATION) {audioManager.setSpeakerphoneOn(false);//关闭扬声器}audioManager.setMode(mode);
}

做到这一步,如果此时还是没有解决问题:

那就是在播放模式没有设置正确:

  在这里我使用的是AudioTask播放语音,初始化AudioTask设置如下:int sampleRate = readInt(packet, offset + 36);//比特率int minBufferSize = AudioTrack.getMinBufferSize(sampleRate,AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);//缓冲大小AudioTrack track = new AudioTrack(AudioManager.STREAM_VOICE_CALL, sampleRate,AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT,minBufferSize, AudioTrack.MODE_STREAM);我之前一直设置的是AudioManager.STREAM_MUSIC,找这个问题找了一天后来找到,知道看到下面这个网站,才找到答案

下面是链接:

  [这里写链接内容](http://stackoverflow.com/questions/6577646/what-is-audio-focus-in-android-class-audiomanager?rq=1)
  • 1

写到这里就结束了,稍微扩展下,

像很多音乐播放器,插入耳机时会使用耳机播放,当我们拔出而且得时候,会暂停,或者别的操作如何实现咧? 
其实很简单,当耳机插入或者链接蓝牙耳机,系统已经默认处理插入耳机切换模式的操作,此时我们需要处理就是拔出耳机的处理 
监听耳机状态首先想到广播:而系统也为我们提供相应的广播,我们只需要监听耳机变化广播就可以了 
代码如下:

  1. state — 0代表拔出,1代表插入
  2. name— 字符串,代表headset的类型。
  3. microphone – 1代表这个headset有麦克风,0则没有。

    BroadcastReceiver mHeadSetReceiver = new BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) {

    // TODO Auto-generated method stub   if(intent.hasExtra("state")){  if(intent.getIntExtra("state", 0)==0){  Toast.makeText(context, "headset not connected", Toast.LENGTH_LONG).show();  }  else if(intent.getIntExtra("state", 0)==1){  Toast.makeText(context, "headset  connected", Toast.LENGTH_LONG).show();  }  }
    

    }

注意:这个广播必须是在代码里面注册Receiver才有效,在xml中添加intentfilter没效。

android播放语音,切换听筒模式遇到的问题相关推荐

  1. iOS语音播放之切换听筒和扬声器的方法解决方案

    iOS下微信语音播放之切换听筒和扬声器的方法解决方案 [[UIDevice currentDevice] setProximityMonitoringEnabled:YES]; //建议在播放之前设置 ...

  2. android 设置听筒模式切换,Android开发【06-29视频贴】切换听筒模式部分手机失效,怎么解决?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 就是我做的是一个可以切换手机听筒模式和扬声器模式的APP,在其他手机上可以正常切换,但是在华为手机上切换失败,是什么原因? 是不是华为手机又其他方式?希望 ...

  3. android关闭听筒模式,Android开发【06-29视频贴】切换听筒模式部分手机失效,怎么解决?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 就是我做的是一个可以切换手机听筒模式和扬声器模式的APP,在其他手机上可以正常切换,但是在华为手机上切换失败,是什么原因? 是不是华为手机又其他方式?希望 ...

  4. android开发 听筒模式,Android开发【06-29视频贴】切换听筒模式部分手机失效,怎么解决?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 就是我做的是一个可以切换手机听筒模式和扬声器模式的APP,在其他手机上可以正常切换,但是在华为手机上切换失败,是什么原因? 是不是华为手机又其他方式?希望 ...

  5. 手机 播放音频 切换听筒和

    奇葩需求年年有  今年特别多, 东西不难 ,  但总忘 [[self.receiverSwitch rac_signalForControlEvents:UIControlEventValueChan ...

  6. 原生android 播放语音、获取wifi名字

    最近在研究android获取wifi名字.想实现一个类似链接wifi后,APP里播放下,链接这个wifi地方的信息.比如,已连接wifi,APP就播放语音啊天气啊.或者欢迎使用本wifi等等. 这里记 ...

  7. Android5.0版本之后切换听筒模式

    5.0以前Android听筒模式和扬声器模式这样就管用 扬声器: //关闭麦克风   mAudioManager.setMicrophoneMute(false);   // 打开扬声器   mAud ...

  8. iOS 类微信语音播放之切换听筒和扬声器的方法解决方案

    [[UIDevice currentDevice] setProximityMonitoringEnabled:NO];   //建议在播放之前设置yes,播放结束设置NO,这个功能是 //添加监听 ...

  9. iOS-OC-语音播放之切换听筒和扬声器的方法解决方案(红外感应)

    1.设置监听,设置红外线开启状态(先关闭) //监听是否靠近耳朵     [[NSNotificationCenter defaultCenter] addObserver:self selector ...

最新文章

  1. struts2 不返回result的做法
  2. JZOJ 5426. 【NOIP2017提高A组集训10.25】摘Galo
  3. SAP Cloud Platform integration上创建一个最简单的iFlow
  4. 符号说明表怎么做_能看懂这些房屋施工图,说明你家装修没问题了
  5. python3123_使用sox和python,基于时间戳列表对音频区域进行静音处理
  6. 对 app_offline.htm 的几点错误认识
  7. WinForm 处理未处理的异常 Application.ThreadException + AppDomain.CurrentDomain.UnhandledException
  8. matlab数字图像处理系统
  9. 推导飞机飞行动力学方程组
  10. 图片转Excel表格 文字识别 表格识别
  11. python自动注册邮箱_python自动化办公——邮箱
  12. 核心游戏系统架构设计
  13. mac:系统存在两个Macintosh HD是怎么回事
  14. 图像重采样/插值原理与其在MRI脑影像分辨率修改中的应用——将尺寸为1mm标准模板修改成体素尺寸为3、6、8mm标准模板(FSL、SPM12、NIfTI_20140122、dpabi、nilearn)
  15. Android-内存泄露知识详解
  16. 高博视觉SLAM十四讲--罗德里格斯公式推导
  17. c语言中void的用法
  18. Oracle JDBC使用lob不释放临时表空间的解决方案
  19. windows 趣味实用脚本
  20. 013 Rust死灵书之类型转换

热门文章

  1. 深圳小汽车车牌竞拍价格预测
  2. iOS 答题功能实现
  3. 历史上十大著名思想实验
  4. 学习OpenCV2——Mat之通道的理解
  5. 大吉大利今晚吃鸡——枪械篇
  6. 中科创达C++ 二面(hr面,30min,offer)
  7. 私人 — 在 Apple 商务管理或 Apple 校园教务管理上作为自定 App 提供
  8. 微信网页授权并获取用户信息
  9. 4月30日之后的华芯通
  10. C语言lseek()函数和 fseek()函数 rewind函数