2010-11-16 3 views
4

Я программирую приложение для sip для Android. Во время разговора я должен записать вход микрофона и воспроизвести входящий звук. Должно быть дополнительное использование громкой связи. Это должны быть совместимые с Android 1.5+ (1.5, 1.6, 2.0, 2.1, 2.2, будущие версии) и переносные устройства.Android запись и воспроизведение + спикерфон как опция

OK. Поэтому я использую AudioTrack для воспроизведения входящего звука, AudioRecord для записи данных с микрофона и AudioManager.setSpeakerphoneOn() для включения или выключения громкой связи.

Звучит просто, но это не так просто, как должно быть. AudioManager.setSpeakerphoneOn (false) не работает, если не вызван AudioManager.setMode (AudioManager.MODE_IN_CALL). Поэтому я должен быть в MODE_IN_CALL.

Тем не менее ОК и просто, и это работает на моем G1 с Android 1.6, Samsung старше телефона, эмуляторы, многие наши устройства клиента и т.д. Но это не работает везде :(

На Samsung таблетки GT-P1000 Я получаю поток 0, 0, 0, 0, ... как микрофонный вход. Я думаю, что та же проблема касается телефонов Motorola (клиенты жалуются). После некоторого теста я понял, что это вызвано AudioManager.setMode (AudioManager.MODE_IN_CALL). Это приводит к тому, что микрофон не работает на некоторых устройствах, но я должен его вызвать, потому что в противном случае я не могу отключить громкую связь.

Есть ли простой способ сделать это простым, правильным и рабочим? И если возможно, без ада, Sipdroid весьма опасный источник код:

if (RtpStreamReceiver.samsung) { 
    AudioManager am = (AudioManager) Receiver.mContext.getSystemService(Context.AUDIO_SERVICE); 
    am.setMode(AudioManager.MODE_IN_CALL); 
    am.setMode(AudioManager.MODE_NORMAL); 
} 

или

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

ответ

1

Попробуйте ........

AudioManager аудио = (AudioManager) context.getSystemService (Context.AUDIO_SERVICE); audio.setRingerMode (AudioManager.RINGER_MODE_NORMAL);

 Смежные вопросы

  • Нет связанных вопросов^_^