[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
转载于:https://www.cnblogs.com/eyeandroid/p/3201577.html
[Android Training视频系列] 8.3 Dealing with Audio Output Hardware相关推荐
- [Android Training视频系列]2.2 Pausing and Resuming an Activity
[Android Training视频系列]2.2 Pausing and Resuming an Activity 1.主要内容 本讲介绍onPause和onResume,主要分析了在onPause ...
- [Android Training视频系列]2.4 Recreating an Activity
[Android Training视频系列]2.4 Recreating an Activity 1.主要内容 本讲讲解onSaveInstanceState与onRestoreInstanceSta ...
- [Android Training视频系列] 8.1 Controlling Your App’s Volume and Playback
主要内容: 1 鉴别使用的是哪个音频流 2 使用物理音量键控制应用程序的音量 3 使用物理播放控制键来控制应用程序的音频播放 视频讲解:http://www.eyeandroid.com/thread ...
- [Android Samples视频系列之ApiDemos] App-Activity-Recreate
[Android Samples视频系列之ApiDemos] App-Activity-Recreate 1.Demo说明与演示 该Demo演示如何动态切换Theme,要动态切换Theme必需recr ...
- [Android] [音视频系列]在 Android 平台使用 AudioRecord 和 AudioTrack API 完成音频 PCM 数据的采集和播放,并实现读写音频 wav 文件
参考 官方文档地址:https://developer.android.google.cn/reference/android/media/AudioRecord GitHub 地址:https:// ...
- Android音视频系列(八):了解音频格式WAV以及与PCM的转换
前言 之前我们已经了解了PCM音频数据,我们理解为最原始的数据,虽然他的音质是最棒的,但是同时也暴露出两个很重要的问题: 普通播放器无法播放,数据里不包含任何跟音频格式有关的信息(声道,采样率等等): ...
- android声音播放函数双声道合并,Android音视频系列(七):PCM音频单声道与双声道的相互转换...
前言 上一篇我们已经学习了PCM音频的保存格式,这一篇我们通过掌握的知识,完成PCM音频的单声道和双声道的互相转换. 正文 首先我们把上一篇的最核心部分贴出来: PCM音频保存格式 我们首先完成单声道 ...
- Android音频格式转换,Android音视频系列(八):了解音频格式WAV以及与PCM的转换...
前言 之前我们已经了解了PCM音频数据,我们理解为最原始的数据,虽然他的音质是最棒的,但是同时也暴露出两个很重要的问题: 普通播放器无法播放,数据里不包含任何跟音频格式有关的信息(声道,采样率等等): ...
- Android音视频学习系列(五) — 掌握音频基础知识并使用AudioTrack、OpenSL ES渲染PCM数据
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
最新文章
- 如何对batch的数据求Gram矩阵
- 怎样写 OpenStack Neutron 的 Extension (四)
- iphone6s发布会_iPhone 6S/SE升级iOS 13性能测试:App启动速度比iOS 12.4.1慢
- 21天学MySQL_SQL21天自学通.pdf
- python脚本 pyqt 打包成windows可执行exe文件 pyinstaller
- MySQL数据库(六) 一一 基本操作之事物和索引
- qlv视频转换器免费版_迅捷视频转换器无法转换腾讯视频怎么办?亲测操作快速转换...
- Hadoop的安装配置
- 峰Redis学习(7)Redis 之Keys 通用操作
- java的JVM与垃圾回收机制
- 直线/折线/圆/三角形划分平面直线切割球问题大总结(最多能划分多少区域)
- 因为洋红色被告垄断,德国电信心塞
- iOS上线APP在App Store地址
- 基于Android的手机音乐播放器的设计
- 使用idea快速生成项目树结构
- Cloud Exchange已上线 Collis的公告
- 刘韧工作手册(2023年版)
- 博弈论·公平组合游戏 学习笔记
- html实现气流动态图,新风系统的动态图,简单易懂
- linux下修改文件查看样式(日期/文件大小)