Android官方开发文档Training系列课程中文版:管理音频播放之音频输出硬件的处理-阿里云开发者社区

开发者社区> sahadev> 正文

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

简介: 原文地址:http://android.xsoftlab.net/training/managing-audio/audio-output.html 当用户使用Android设备享受音频时,它有多重的可选择替代方案。
+关注继续查看

原文地址: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 {
    @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);
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
更快的Maven构建工具mvnd和Gradle哪个性能更好?(1)
更快的Maven构建工具mvnd和Gradle哪个性能更好?(1)
17 0
android11开启无线调试
目录 配对步骤 步骤一:在手机上启用**开发者模式 & USB 调试** 步骤二: 手机开启开发者选项,打开无线调试 步骤三:点击无线调试,使用配对码配对设备 电脑上的操作:电脑打开cmd命令行 步骤一:检查adb版本 步骤二:按图输入下一个命令 步骤三
5 0
你真的了解CSS3硬件加速吗?
你真的了解CSS3硬件加速吗?
36 0
Flutter基础笔记
目录 List里面常用的属性和方法: Set Map forEach,map, where,any,every extends抽象类 和 implements Flutter环境搭建 入口文件、入口方法 第一个 Demo Center 组件的 使用 把内容单独抽离成一个组件 给 Text 组件增加一些装饰 用MaterialApp 和 Scaffold两个组件装饰 App Text 组件 Container 组件 图片组件 引入本地图片 裁剪布局之 ClipRect、ClipRRect、ClipOval、ClipPath、CustomClipper 实现圆角以及实现圆形图片 圆形头像
4 0
用谷歌云自建微软GitHub codespaces和VScode.dev云编译Cloud IDE是怎样一种体验?
你将拥有比微软官方vscode.dev 更强大的vscode谷歌云IDE,你可以随时随地坐在马桶上用599块钱的小米手机登陆网页版vscode开发一款APP,比如:Tiktok;这个网页版vscode比微软GitHub codespaces和VScode.dev官方更强大,它同样拥有terminal,重点是它编译不受本地网络的限制可以远程云编译,高速高效随时随地,而且是使用强大谷歌云服务器进行编译,爽哼! 下一步咱们搞个Android studio网页版云编译平台,好不好,宝? 下下一步咱们使用599块钱的小米手机远程连接网页版vscode和网页版Android studio开发一款安卓ap
9 0
高智商学生如何玩转无影云电脑
作为一名刚学习编程技术的学生来说,非常有幸体验阿里的无影云电脑,非常的荣幸,也感谢阿里云的支持与帮助,本人将写一遍无影云电脑评测的文章来记录一下这一令人感动的瞬间。
33 0
flutter项目如何打包(android)
打包前要做的 1.更换图标 andriod–》app–app–》src—》main-》Java----》res–》minpmap
11 0
flutter分平台主题定制
有时候,为了满足不同平台的用户需求,我们希望针对特定的平台设置不同的样式。比如,在 iOS 平台上设置浅色主题,在 Android 平台上设置深色主题。面对这样的需求,我们可以根据 defaultTargetPlatform 来判断当前应用所运行的平台,从而根据系统类型来设置对应的主题。
8 0
+关注
sahadev
移动开发方向专家
183
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载