[Android Training视频系列] 8.3 Dealing with Audio Output Hardware

用户在播放音乐的时候有多个选择,可以使用内置的扬声器,有线耳机或者是支持A2DP的蓝牙耳机。(补充:A2DP全名是Advanced Audio Distribution Profile 蓝牙音频传输模型协定, A2DP是能够采用耳机内的芯片来堆栈数据,达到声音的高清晰度。有A2DP的耳机就是蓝牙立体声耳机。声音能达到44.1kHz,一般的耳机只能达到8kHz。如果手机支持蓝牙,只要装载A2DP协议,就能使用A2DP耳机了。还有消费者看到技术参数提到蓝牙V1.0 V1.1 V1.2 V2.0——这些是指蓝牙的技术版本,是指通过蓝牙传输的速度,他们是否支持A2DP具体要看蓝牙产品制造商是否使用这个技术。)

检测目前正在使用的硬件设备

选择不同的播放设备会影响应用程序的行为。

可以使用AudioManager来查询某个音频是输出到扬声器、有线耳机还是蓝牙上。代码如下:

if (am.isBluetoothA2dpOn()) {

// Adjust output for Bluetooth.

} else if (am.isSpeakerphoneOn()) {

// Adjust output for Speakerphone.

} else if (am.isWiredHeadsetOn()) {

// Adjust output for headsets

} else {

// If audio plays and noone can hear it, is it still playing?

}

处理音频输出设备的改变

当有线耳机被拔出或者蓝牙设备断开连接的时候,音频流会自动输出到内置的扬声器上。假设之前播放声音很大,这个时候突然转到扬声器播放会显得非常嘈杂。

幸运的是,系统会在这种事件发生时发出广播带有ACTION_AUDIO_BECOMING_NOISY的intent。无论何时播放音频都应该去注册这个BroadcastReceiver来监听这个intent会是比较好的做法。在音乐播放器下,用户通常希望发生那样事情的时候能够暂停当前歌曲的播放。而在游戏里,通常会选择减低音量。

private class NoisyAudioStreamReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) {

// Pause the playback

}

}

}

private IntentFilter intentFilter =

new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);

private void startPlayback() {

registerReceiver(myNoisyAudioStreamReceiver(), intentFilter);

}

private void stopPlayback() {

unregisterReceiver(myNoisyAudioStreamReceiver);

}

视频讲解:http://www.eyeandroid.com/thread-15915-1-1.html

posted on 2013-07-19 21:31 EyeAndroid 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/eyeandroid/p/3201577.html

[Android Training视频系列] 8.3 Dealing with Audio Output Hardware相关推荐

  1. [Android Training视频系列]2.2 Pausing and Resuming an Activity

    [Android Training视频系列]2.2 Pausing and Resuming an Activity 1.主要内容 本讲介绍onPause和onResume,主要分析了在onPause ...

  2. [Android Training视频系列]2.4 Recreating an Activity

    [Android Training视频系列]2.4 Recreating an Activity 1.主要内容 本讲讲解onSaveInstanceState与onRestoreInstanceSta ...

  3. [Android Training视频系列] 8.1 Controlling Your App’s Volume and Playback

    主要内容: 1 鉴别使用的是哪个音频流 2 使用物理音量键控制应用程序的音量 3 使用物理播放控制键来控制应用程序的音频播放 视频讲解:http://www.eyeandroid.com/thread ...

  4. [Android Samples视频系列之ApiDemos] App-Activity-Recreate

    [Android Samples视频系列之ApiDemos] App-Activity-Recreate 1.Demo说明与演示 该Demo演示如何动态切换Theme,要动态切换Theme必需recr ...

  5. [Android] [音视频系列]在 Android 平台使用 AudioRecord 和 AudioTrack API 完成音频 PCM 数据的采集和播放,并实现读写音频 wav 文件

    参考 官方文档地址:https://developer.android.google.cn/reference/android/media/AudioRecord GitHub 地址:https:// ...

  6. Android音视频系列(八):了解音频格式WAV以及与PCM的转换

    前言 之前我们已经了解了PCM音频数据,我们理解为最原始的数据,虽然他的音质是最棒的,但是同时也暴露出两个很重要的问题: 普通播放器无法播放,数据里不包含任何跟音频格式有关的信息(声道,采样率等等): ...

  7. android声音播放函数双声道合并,Android音视频系列(七):PCM音频单声道与双声道的相互转换...

    前言 上一篇我们已经学习了PCM音频的保存格式,这一篇我们通过掌握的知识,完成PCM音频的单声道和双声道的互相转换. 正文 首先我们把上一篇的最核心部分贴出来: PCM音频保存格式 我们首先完成单声道 ...

  8. Android音频格式转换,Android音视频系列(八):了解音频格式WAV以及与PCM的转换...

    前言 之前我们已经了解了PCM音频数据,我们理解为最原始的数据,虽然他的音质是最棒的,但是同时也暴露出两个很重要的问题: 普通播放器无法播放,数据里不包含任何跟音频格式有关的信息(声道,采样率等等): ...

  9. Android音视频学习系列(五) — 掌握音频基础知识并使用AudioTrack、OpenSL ES渲染PCM数据

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

最新文章

  1. 如何对batch的数据求Gram矩阵
  2. 怎样写 OpenStack Neutron 的 Extension (四)
  3. iphone6s发布会_iPhone 6S/SE升级iOS 13性能测试:App启动速度比iOS 12.4.1慢
  4. 21天学MySQL_SQL21天自学通.pdf
  5. python脚本 pyqt 打包成windows可执行exe文件 pyinstaller
  6. MySQL数据库(六) 一一 基本操作之事物和索引
  7. qlv视频转换器免费版_迅捷视频转换器无法转换腾讯视频怎么办?亲测操作快速转换...
  8. Hadoop的安装配置
  9. 峰Redis学习(7)Redis 之Keys 通用操作
  10. java的JVM与垃圾回收机制
  11. 直线/折线/圆/三角形划分平面直线切割球问题大总结(最多能划分多少区域)
  12. 因为洋红色被告垄断,德国电信心塞
  13. iOS上线APP在App Store地址
  14. 基于Android的手机音乐播放器的设计
  15. 使用idea快速生成项目树结构
  16. Cloud Exchange已上线 Collis的公告
  17. 刘韧工作手册(2023年版)
  18. 博弈论·公平组合游戏 学习笔记
  19. html实现气流动态图,新风系统的动态图,简单易懂
  20. linux下修改文件查看样式(日期/文件大小)

热门文章

  1. 2020-07-09
  2. Grafana启动报错
  3. 在苹果Mac上的Safari浏览器中如何阻止跨站跟踪?
  4. 相关滤波跟踪·KCF公式详细推导
  5. 用于时间序列异常检测的学生化残差( studentized residual)的理论和代码实现
  6. C++ 常用WinDef 宏函数LOWORD和HIWORD
  7. Excel如何在混合文本中提取数字
  8. 大数据预科班1~4天习题
  9. 以太网速率怎么手动设置_如何提高上网速度_直接设置网络接口跃点数就可以了 - 驱动管家...
  10. silverlight 关于按钮样式