兼容音频输出设备

编写:kesenhoo - 原文:http://developer.android.com/training/managing-audio/audio-output.html

当用户想要通过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)

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

幸运的是,系统会在这种情况下广播带有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);
}
时间: 2024-10-13 01:40:15

兼容音频输出设备的相关文章

管理音频播放(摘自Android官方培训课程中文版(v0.9.5))

编写:kesenhoo - 原文:http://developer.android.com/training/managing-audio/index.html 如果我们的应用能够播放音频,那么让用户能够以自己预期的方式控制音频是很重要的.为了保证良好的用户体验,我们应该让应用能够管理当前的音频焦点,因为这样才能确保多个应用不会在同一时刻一起播放音频. 在学习本系列课程中,我们将会创建可以对音量按钮进行响应的应用,该应用会在播放音频的时候请求获取音频焦点,并且在当前音频焦点被系统或其他应用所改变

Windows 下音频数据采集和播放

音频操作所需头文件和链接库 #include<mmsystem.h>#include<mmreg.h>#pragma  comment(lib, "winmm.lib") 由于音频采集过程是一个持续过程,所以建议为它们各自分配一个线程,而使用MFC的 CWinThread 类是一个不错的选择,笔者就是利用CWinThread类将这两个功能封装成了两个独立的类,为以后的使用提供了很大的便利性.笔者在此为读者提供本人写好的一个工程,此工程为视频语音采集的不完善版,目

深入剖析Android音频之AudioTrack

播放声音可以用MediaPlayer和AudioTrack,两者都提供了java API供应用开发者使用.虽然都可以播放声音,但两者还是有很大的区别的.其中最大的区别是MediaPlayer可以播放多种格式的声音文件,例如MP3,AAC,WAV,OGG,MIDI等.MediaPlayer会在framework层创建对应的音频解码器.而AudioTrack只能播放已经解码的PCM流,如果是文件的话只支持wav格式的音频文件,因为wav格式的音频文件大部分都是PCM流.AudioTrack不创建解码

【Android应用开发技术:媒体开发】音频

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells Github:https://github.com/AllenWells Android为播放音乐.闹铃.通知铃.来电声音.系统声音.打电话声音和DTMF频道都分别维护了一个隔离的音频流,这是我们能够控制不同音频的前提,这其中大多数的音频流都是被系统限制的,不能胡乱使用. 一 音频控制 默认情况下,按下音量控制键会调节当前被激活的音频流,如果我们的

Audio Session Category 音频类别

Audio Session Category 音频类别 音频类别 获取输入硬件 获取输出硬件 与iPod混音 服从振铃/静音 AVAudioSessionCategoryPlayback 否 是 否 否 AVAudioSessionCategoryRecord 是 否 否 否 AVAudioSessionCategoryPlayAndRecord 是 是 否 否 AVAudioSessionCategoryAmbient 否 是 是 是 AVAudioSessionCategorySoloAmb

在树莓派上播放音频

播放一个MP3文件,在命令行终端上用"cd"命令导航到.mp3文件所在的路径,然后输入以下命令: omxplayer example.mp3 这将会通过你的显示器内置音箱或者你的耳机接口连接设备播放example.mp3音频文件. 如果你需要一个示例音频文件,你可以输入以下命令来获取: wget http://goo.gl/MOXGX3 -O example.mp3 --no-check-certificate 如果你没有听到任何声音,请确认你的耳机或者音箱已经正确连接上.注意omxp

科技版“传音入密”:音频聚光灯现在怎么样了?

武侠文化里,除了轻功和内力之外,最著名的一个奇思妙想大概要属"传音入密". 这手功夫的意思是说,武林高手可以用独特的方法发出声音,只让特定的某个人听到,其他人则完全蒙在鼓里.一般在主角临危之时得到高人指点,都是靠这招来推动情节的. 笔者曾经研究过,"传音入密"在清末民初的武侠小说里基本是种"魔法",需要靠符咒和口诀来实现.到了金庸这里已经进行了一定程度的"科学化",比如<神雕侠侣>里的"千里传音"

从脚本之家上看到的一段音频播放代码

亲测将wav文件放到project文件下将9420.wav换成对用文件名即可播放 播放完毕后程序自动停止 1 package someOrdinaryThoughts; 2 3 //public File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例.如果给定字符串是空字符串,那么结果是空抽象路径名. 4 import java.io.File; 5 //当发生某种 I/O 异常时,抛出此异常.此类是失败或中断的 I/O 操作生成的异常的通用

关于音频焦点的理解

什么叫音频焦点 (audio focus)?  android系统是一个多任务操作系统,因此同一时刻允许许多任务同时工作.但是这对音频类应用来说是个挑战,因为如果多个音频同时播放的话,很多情况下用户体验会相当的差!比如听音乐时,来了个电话,这时你的耳机里就是电话和音乐共同工作,绝对是个悲剧!  为了解决这个问题从android2.2开始引入audio focus的概念.当你需要播放音乐或者发送一个通知的时候,你可以去要求获得音频焦点.一旦获得,就可以自由的使用音频输出设备.但是同时它也在时时刻刻