首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android录音播放+免持话筒选项

Android录音播放+免持话筒选项
EN

Stack Overflow用户
提问于 2010-11-16 23:37:46
回答 1查看 2.6K关注 0票数 4

我正在为Android编写一个sip应用程序。在通话过程中,我必须录制麦克风输入并播放传入的音频。必须选择使用免持话筒。它必须与安卓1.5+ (1.5,1.6,2.0,2.1,2.2,未来版本)兼容,并且设备便携。

好的。因此,我使用AudioTrack播放传入的音频,使用AudioRecord录制来自麦克风的数据,使用AudioManager.setSpeakerphoneOn()启用或禁用免持话筒。

听起来很简单,但并不像它应该的那样简单。除非调用AudioManager.setMode(AudioManager.MODE_IN_CALL),否则AudioManager.setSpeakerphoneOn(false)不起作用。所以我必须在MODE_IN_CALL。

仍然可以和简单,它适用于我的G1与Android1.6,旧的三星手机,模拟器,我们的许多客户设备等,但它并不是所有地方都有效:(

在三星平板电脑GT-P1000上,我得到的流是0,0,0,0,...作为麦克风输入。我认为摩托罗拉手机也存在同样的问题(顾客抱怨)。经过一些测试,我意识到这是由AudioManager.setMode(AudioManager.MODE_IN_CALL).引起的这会导致麦克风在某些设备上无法正常工作。但我必须呼叫它,否则我无法禁用免持话筒。

有没有一种简单的方法可以让它变得简单、正确和有效?如果可能的话,如果没有像Sipdroid这样的地狱,高度危险的源代码:

代码语言:javascript
复制
if (RtpStreamReceiver.samsung) {
    AudioManager am = (AudioManager) Receiver.mContext.getSystemService(Context.AUDIO_SERVICE);
    am.setMode(AudioManager.MODE_IN_CALL);
    am.setMode(AudioManager.MODE_NORMAL);
}

代码语言:javascript
复制
 void initMode() {
     samsung = Build.MODEL.contains("SAMSUNG") || Build.MODEL.contains("SPH-") ||
     Build.MODEL.contains("SGH-") || Build.MODEL.contains("GT-");

     if (Receiver.call_state == UserAgent.UA_STATE_INCOMING_CALL &&
     (Receiver.pstn_state == null || Receiver.pstn_state.equals("IDLE"))) {
       setMode(AudioManager.MODE_NORMAL); 
 }

非常感谢Jan

EN

回答 1

Stack Overflow用户

发布于 2011-07-14 19:00:33

试试看......

AudioManager音频= (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);audio.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4195864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档