簡體   English   中英

Android錄音和播放+免提電話作為選項

[英]Android recording and playing +speakerphone as an option

我正在為Android編寫一個sip應用程序。 在通話期間,我必須錄制麥克風輸入並播放傳入的音頻。 必須有揚聲器電話的可選使用。 它必須兼容Android 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與Android 1.6,舊的三星手機,模擬器,許多我們的客戶設備等。但它無處不在:(

在三星平板電腦GT-P1000上,我得到0,0,0,0 ......的流作為麥克風輸入。 我認為同樣的問題出現在摩托羅拉手機上(客戶抱怨)。 經過一些測試后,我意識到它是由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

試試看........

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM