创建多媒体APP 之 音频播放:处理音频输出硬件
来源:互联网 发布:软件开发培训班 编辑:程序博客网 时间:2024/05/18 03:16
用户有多种途径来听android设备的音频文件。每个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
的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);}
- 创建多媒体APP 之 音频播放:处理音频输出硬件
- 创建多媒体APP 之 音频播放:管理音频焦点
- 创建多媒体APP 之 音频播放:控制你的APP里面音频的声音大小和播放
- Android官方开发文档Training系列课程中文版:管理音频播放之音频输出硬件的处理
- 多媒体之使用PlaySound播放音频
- Android---处理音频输出的硬件
- Android Developers:处理音频输出的硬件
- Android---处理音频输出的硬件
- android之播放多媒体文件一(播放音频)
- 多媒体(音频播放)MediaPlayer
- Android—多媒体(音频播放)
- IOS实现多媒体音频之音乐播放器
- 多媒体之使用MF Media Session播放音频
- 《android多媒体api》之AudioTrack原始音频pcm播放api
- 【多媒体之音频】音频频谱设计 Visualizer
- Dealing with Audio Output Hardware 处理音频输出硬件设备
- iOS 之播放音频
- Vitamio之播放音频
- Android 驱动开发系列二
- 读《java编程思想》学到的——多态
- __declspec(dllimport)的作用
- dns服务器缓存与apache的301之类跳转
- WPF 判断是否为设计(Design)状态
- 创建多媒体APP 之 音频播放:处理音频输出硬件
- linux C/C++编程基本操作
- js 知识总结
- Oracle创建用户、表空间、导入导出、...命令
- A. Game Outcome
- 清理你的目录,一条命令删除已从 tar rar 包解压出来的所有文件
- 【Android-Emulator】Android模拟器介绍和基本使用
- libtool : X--tag=CC: command not found 编译报错
- zoj3690(递推)