[英]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.