笔记61 | Android兼容音频输出设备的学习

兼容音频输出设备

编写:kesenhoo

当用户想要通过Android设备欣赏音乐的时候,他可以有多种选择,大多数设备拥有内置的扬声器,有线耳机,也有其它很多设备支持蓝牙连接,有些甚至还支持A2DP蓝牙音频传输模型协定。(译注:A2DP全名是Advanced Audio Distribution Profile 蓝牙音频传输模型协定! A2DP是能够采用耳机内的芯片来堆栈数据,达到声音的高清晰度。有A2DP的耳机就是蓝牙立体声耳机。声音能达到44.1kHz,一般的耳机只能达到8kHz。如果手机支持蓝牙,只要装载A2DP协议,就能使用A2DP耳机了。还有消费者看到技术参数提到蓝牙V1.0 V1.1 V1.2 V2.0 - 这些是指蓝牙的技术版本,是指通过蓝牙传输的速度,他们是否支持A2DP具体要看蓝牙产品制造商是否使用这个技术。来自百度百科)

检测目前正在使用的硬件设备(Check What Hardware is Being Used)

使用不同的硬件播放声音会影响到应用的行为。可以使用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?
}

处理音频输出设备的改变(Handle Changes in the Audio Output Hardware)

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

幸运的是,系统会在这种情况下广播带有ACTIONAUDIOBECOMING_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);
}

原文发布于微信公众号 - 项勇(xiangy_life)

原文发表时间:2018-01-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

世界杯竞猜,怎么选会赚

世界杯小组赛尘埃落定,淘汰赛鏖战正酣。开赛前我做过一个不靠谱的预测 根据四万场比赛结果,我给今年世界杯每场比赛计算了胜率,冠军竟然是…,现在来回顾下:

1021
来自专栏ATYUN订阅号

谁是下一个库里?搭载AI技术的APP助你炼成神射手

想要像斯蒂芬·库里(Stephen Curry)或凯文·杜兰特(Kevin Durant)一样投篮得分?AI可以提供帮助。HomeCourt是一款篮球训练应用程...

1064
来自专栏量子位

AI续写的《冰与火之歌》怎么样?国外小哥录了一个评书版

允中 发自 凹非寺 量子位 报道 | 公众号 QbitAI ? 读……读粗来了…… 你知道《凛冬的寒风》么? 这个名字,归属于乔治啊啊马丁《冰与火之歌》系列小说...

2583
来自专栏GopherCoder

分享"一只爬虫"

1486
来自专栏飞总聊IT

大数据那些事(26):Apache Drill之我很土但我毕业了

写大数据系列越来越进入到不知所云和胡说八道的边界了。最大的原因还是我对open source的了解并不来源于亲身的实践。所谓纸上得来终觉浅说的就是我这样的人吧。...

3578
来自专栏腾讯数据中心

数据中心专用术语词典首发!破译圈内暗语

随着互联网数据中心的蓬勃发展,IDC相关的讯息也呈几何级喷发。不胜枚举的行业术语、不拘一格的表达方式,对传递数据中心相关信息的影响已不可小觑。本文可以帮助大家更...

4274
来自专栏机器人网

工业机器人的驱动与传动结构图

直线驱动机构 1. 齿轮齿条装置 通常,齿条是固定不动的,当齿轮传动时, 齿轮轴连同拖板沿齿条方向做直线运动, 这样, 齿轮的旋转运动就转换成为拖板的直线运动,...

3205
来自专栏机器人网

无节操!DIY一个“好色”机器人,帮你搭讪美女鲜肉

遇见大牛,爱抱大腿不是一件坏事,然而如果是一个爱抱大腿的机器人呢?NoodleFeet的主要功能就是寻找周围人的大腿,然后冲上去抱大腿。 除了走路,Noodle...

2656
来自专栏机器人网

知识点:工业机器人的组成和分类

  (一)工业机器人的组成   工业机器人一般由操作机、驱动装置和控制系统等部分组成。 ?  1.操作机。也称执行机构,由末端执行器、手腕、手臂和机座组成。...

2633
来自专栏机器人网

教你用软胶棒DIY软体机器人

在这个世界上不断涌现的各种发明中,总是有一些看上去没什么实际用处,但却新奇有趣,很吸引眼球的项目。下面要介绍的使用3D打印、少量热胶棒、几根绳子和一对伺服电机制...

3106

扫码关注云+社区