android 多媒体总结--音频相关(一)
来源:互联网 发布:php网页联机游戏源码 编辑:程序博客网 时间:2024/06/03 13:51
在做即时通信软件时,经常碰到一些音频的相关的问题。
1.蓝牙和有线耳机连接后,音频不能切到耳机中。此类问题主要是AudioManager的setSpeakerphoneOn函数要设置为false才行,而外扩喇叭播放音频数据就要设置为true。以下提供几个常用的代码:
(1) 判断蓝牙耳机是否接通: BluetoothProfile.STATE_DISCONNECTED ==BluetoothAdapter.getDefaultAdapter().getProfileConnectionState(BluetoothProfile.HEADSET)表示没有连接蓝牙耳塞; BluetoothProfile.STATE_CONNECTED==BluetoothAdapter.getDefaultAdapter().getProfileConnectionState(BluetoothProfile.HEADSET)表示已连接蓝牙耳塞;
(2) AudioManager的isWiredHeadsetOn() == true表示有线耳机已插入,等于false表示有线耳机没有插入。
(3)监听耳机的插拔情况是通过监听广播的方式进行的,先注册广播:
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_HEADSET_PLUG);-------监听有线耳塞是否插入
intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);监听蓝牙耳塞的连接状态的改变
intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED); 表示蓝牙耳塞连接上
intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);表示蓝牙耳塞没有连接上
广播处理:
public class HeadsetDetectReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (Intent.ACTION_HEADSET_PLUG.equals(action)) {
if (intent.hasExtra("state")) {
handleHeadsetDetect(intent);
}
}else if (BluetoothDevice.ACTION_ACL_CONNECTED == action) {
handleBluetooth(HEADSETON);
}else if(BluetoothDevice.ACTION_ACL_DISCONNECTED == action){
handleBluetooth(HEADSETOFF);
}else if(BluetoothAdapter.ACTION_STATE_CHANGED == action){
int bluState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);
handleBluetooth(bluState);
}
}
}
其中 intent.getIntExtra("state", 0)等于1时表示有线耳塞插入,等于0时表示耳塞拔出了;
intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0)等于BluetoothAdapter.STATE_TURNING_ON或者 BluetoothAdapter.STATE_ON时表示蓝牙耳塞连接上了。
intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0)等于BluetoothAdapter.STATE_TURNING_OFF或者BluetoothAdapter.STATE_OFF时表示蓝牙耳塞断开了。
(4) 注意蓝牙耳机有两种模式:A2DP和SCO,A2DP是高质量音乐播放(俗称:只进不出),SCO是语音通话(俗称:有进有出)。
2 AudioRecorder录制问题:
(1) 当AudioRecorder.read(this.pcmBuffer, 0,this.pcmBuffer.length);如果使用蓝牙耳塞(有线耳机未测试过)连接会阻塞住,既不往下执行代码,该问题造成的原因就是在录制时长时间不对AudioRecorder进行read造成的数据阻塞,长时间不读后,又开始调用AudioRecorder.read函数时将阻塞在该句代码。
- android 多媒体总结--音频相关(一)
- android多媒体篇-音频-1 音频相关基础知识
- Android中的音频视屏相关(多媒体2)
- Android 多媒体开发-音频
- Android多媒体-深入音频
- android之播放多媒体文件一(播放音频)
- android 多媒体编程(一) MediaPlayer 播放音频
- Android官方课程总结笔记【多媒体之音频管理】
- Android多媒体—音频技术
- Android多媒体-深入音频系列
- Android—多媒体(音频播放)
- android 多媒体相关代码
- android 多媒体相关代码
- Android多媒体相关文章
- Android多媒体相关框架
- Android 多媒体相关
- iOS 多媒体(一)音频播放
- 音频解码相关总结
- MySQL中的约束,添加约束,删除约束,
- 处理org.apache.hadoop.hbase.client.ScannerTimeoutException
- 顺序表应用5:有序顺序表归并
- CCF—Z字形扫描 20141202
- 全球的经济数据
- android 多媒体总结--音频相关(一)
- 接口默认方法冲突
- Android Notification自定义通知样式你要知道的事
- Nginx location块匹配顺序
- error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCR...
- CCF—画图 20140902
- 第二周项目3体验复杂度
- spring.net基本使用:控制反转和依赖注入
- 高级测试