原文地址:http://android.xsoftlab.net/training/managing-audio/audio-output.html

当用户使用Android设备享受音频时,它有多重的可选择替代方案。大多数的设备内置了一套音频系统:扬声器以及有线耳机的耳机插孔,也有很多功能蓝牙连接,以及对A2DP音频的支持。

检查所使用的硬件类型

APP的工作方式取决了音频输出的硬件类型。

你可以通过AudioManager查询当前所被路由的设备扬声器、有线耳机或者附属的蓝牙设备,就像下面的代码显示的这样:

if (isBluetoothA2dpOn()) {// Adjust output for Bluetooth.
} else if (isSpeakerphoneOn()) {// Adjust output for Speakerphone.
} else if (isWiredHeadsetOn()) {// Adjust output for headsets
} else { // If audio plays and noone can hear it, is it still playing?
}

处理音频硬件输出的变动

当耳机被拔出设备时,或者蓝牙设备断开连接时,那么音频流会自动的被重新到内置的扬声器设备上。如果你在一个很高的音量下听音乐,那么这样的话就会有一个很吵闹的体验。

幸运的是,当事件发生时,Android系统会广播一个ACTION_AUDIO_BECOMING_NOISY意图。最佳的实践方式就是在播放音频的时候,对这个意图注册一个BroadcastReceiver来监听它。在音乐播放器的例子中,用户通常会希望暂停音乐的播放。然而如果在进行游戏,那么你可以选择大幅度的降低音量。

private class NoisyAudioStreamReceiver extends BroadcastReceiver {@Overridepublic 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);
}

Android官方开发文档Training系列课程中文版:管理音频播放之音频输出硬件的处理相关推荐

  1. Android官方开发文档Training系列课程中文版:调用相机之控制相机

    原文地址:http://android.xsoftlab.net/training/camera/cameradirect.html 在这节课,我们会讨论如何使用Android框架API来直接控制相机 ...

  2. Android官方开发文档Training系列课程中文版:目录

    原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...

  3. Android官方开发文档Training系列课程中文版:创建自定义View之View的创建

    原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...

  4. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  5. Android官方开发文档Training系列课程中文版:管理音频播放之控制APP的音量与播放

    原文地址:http://android.xsoftlab.net/training/managing-audio/index.html 引言 如果APP需要播放音频,允许用户可以控制音频的播放状态是很 ...

  6. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建

    原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...

  7. Android官方开发文档Training系列课程中文版:打印内容之图像打印

    原文地址:http://android.xsoftlab.net/training/printing/index.html 引言 Android用户会很频繁的浏览设备上的内容,但是有部分情况例外,当屏 ...

  8. Android官方开发文档Training系列课程中文版:Android的安全建议 .

    转载:http://blog.csdn.net/sahadev_/article/details/52949855 原文地址:http://android.xsoftlab.net/training/ ...

  9. Android官方开发文档Training系列课程中文版:Android的安全建议

    原文地址:http://android.xsoftlab.net/training/articles/security-tips.html Android系统内置的安全策略可以有效的降低应用程序的安全 ...

  10. Android官方开发文档Training系列课程中文版:APP的内存管理

    写在开头的话: 如果有同学对Android性能比较关注的,可以阅读这篇文章:Android性能优化建议 原文地址:http://android.xsoftlab.net/training/articl ...

最新文章

  1. 俄克拉荷马州立大学冯锋组博士生招聘-植物与微生物互作
  2. ITK:在没有写访问权的情况下迭代图像中的区域
  3. 关于 ABAP 调试器里的 16 进制值的显示问题
  4. [转载]httpClient.execute抛Connection to refused异常问题
  5. Android Studio导出jar包
  6. linux线程负载,linux 排查cpu负载过高异常(转载)
  7. js 负数移位运算究竟如何进行
  8. quarts集群 运维_精讲Elastic-job + Quartz实现企业级定时任务
  9. easyui 分页实现
  10. IDEA中添加Tomcat配置,Run/Debug Configurations中没有Tomcat选项
  11. [算法模板]高斯消元
  12. 利用salt防范MD5字典攻击
  13. 学会编单片机必须会c语言吗,十天学会单片机和C语言编程.docx
  14. Linux基础知识全面总结
  15. 计算机在输电线路设计中的应用研究,计算机在输电线路基础设计中的应用原稿(电子版)...
  16. Bootstrap可视化布局
  17. 【jzoj 5336】Timi / 提米树(DP)
  18. web安全:QQ号快速登录漏洞及被盗原理
  19. 利用CSS3动画属性实现轮播图切换图片时出现附近内容抖动的解决办法。
  20. scala 环境搭建 变量 值 数据类型 元组 表达式块 语句 函数 柯里化 集合 面向对象 隐式转换

热门文章

  1. 在大公司天天调参数,感觉快废了~
  2. 物联网开发者被疯抢,华为做了什么?
  3. c语言从1打印到100再打印到1该如何编写?
  4. mini2440驱动分析之LCD
  5. DebugOutputString 使用
  6. 使用指针星号转移c语言,C中的指针:何时使用号和星号?
  7. 九、ES6的箭头函数
  8. LeetCode 2135. 统计追加字母可以获得的单词数(位运算+哈希)
  9. LeetCode 336. 回文对(哈希map/Trie树)
  10. LeetCode 1484. 克隆含随机指针的二叉树(哈希/递归)