1. 程式人生 > >Android之關於電話錄音原理,目前的方法還是隻能錄MIC

Android之關於電話錄音原理,目前的方法還是隻能錄MIC

對於android來講,沒有API直接支援對電話進行雙向錄音。
雖然MediaRecorder裡面可以設定recodeRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);來表示要對雙向進行錄音,但是這個功能實際是不可使用的,唯一能直接使用的還是VOICE_MIC。也就是對MIC進行錄音。現在很多的所謂錄音軟體應該都是用的MIC進行錄音的。無論是用MediaRecorder這個類還是用的比較高階寫的AudioRecord這個類。
可以參考下面這個文件對錄音使用MediaRecorder設計的原始碼的分析。貌似按照這裡面所講貌似這幾個引數傳進來直接就不支援了,需要有音訊硬體的支援。

http://wenku.baidu.com/view/71d3e008844769eae009ed00.html

目前看到的比較流行的一個CallRecord軟體的說明,如果要雙向錄音的話,需要有硬體驅動的支援,對於某些型號的手機,這個可以通過打補丁的方式進行支援,對於其他沒法打補丁的機型的話,就只能通過MIC讀來支援了。
http://forum.xda-developers.com/showthread.php?t=1441643

綜合上面來看,目前來講比較通用的方法還是隻能用MIC來進行雙向的錄音了。使用了一個使用AudioRecord進行錄音的軟體,不開擴音的話通話錄音效果還可以,對方聲音還可以忍受。不過這個還是有一些噪聲可以聽出來。目前只能先用這個方法湊活著用了。

可以參考這個,這個程式主要功能還是把錄音轉成MP3,需要用外部庫
http://garage.uraroji.com/2011/03/03/android上でのmp3エンコードのサンプル/

另外關於錄音還有一點需要注意,在註冊了電話錄音狀態的監聽函式以後,不要在這個listen函式裡面直接錄音,這樣的話會導致問題,系統會卡在CALL_STATE_OFFHOOK這個狀態。這中lisen需要儘快的返回,可以在這裡面起一個service,然service實現錄音的功能,然後在idle的時候把這個service停掉,或者裡面對應的錄音停掉。起一個新的thread貌似也是可以的。

相關推薦

Android關於電話錄音原理目前方法還是MIC

對於android來講,沒有API直接支援對電話進行雙向錄音。雖然MediaRecorder裡面可以設定recodeRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);來表示要對雙向進行錄音,但是這個功

java併發 CopyOnWriteArrayList的原理和使用方法

描述 CopyOnWriteArrayList:CopyOnWriteArrayList這是一個ArrayList的執行緒安全的變體,其原理大概可以通俗的理解為:初始化的時候只有一個容器,很常一段時間,這個容器資料、數量等沒有發生變化的時候,大家(多個執行緒),都是讀取(假設這段時間裡只

Android座標系以及獲取座標系的方法

概括:Android中有兩種座標系(Android座標系和檢視座標系)。下面將介紹這兩種座標系以及在座標系中獲取對應的座標值的一些方法。 Android座標系和檢視座標系 1)Android座標系 所謂的Android座標系就是以手機螢幕左上角為原點,從該點水平向右為X軸,從該點水平向下

AndroidContext底層原理

Context的中文翻譯為:語境; 上下文; 背景; 環境,在開發中我們經常說稱之為“上下文”。從Android系統的角度來理解:Context是一個場景,代表與作業系統的互動的一種過程。Context在載入資源、啟動Activity、獲取系統服務、建立View等操作都要參與

Android提交資料到服務端方法簡單封裝

在Android應用中,除了單機版的應用,其餘的應用免不了需要頻繁地與服務端進行資料互動,如果每一種方法都獨立寫一段程式碼,那會造成程式碼大量重複,冗餘,這不是我們所希望的,所以我們可以對其進行一些封裝,這樣不但可以提高程式碼質量,最重要的是我們自己用起來也爽啊。 首先,我們先建立個webservice資料

androidOkHttp簡單使用鍵值對json資料檔案上傳。

okHttp 的簡單使用 引入Gradle依賴:compile 'com.squareup.okhttp3:okhttp:3.4.1' HTTP GET請求 MainActivity程式碼如下: import android.support.v7

設計模式簡單工廠模式工廠方法模式抽象工廠模式

在面向物件程式設計中, 最通常的方法是一個new操作符產生一個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說, 許多型別物件的創造需要一系列的步驟: 你可能需要計算或取得物件的初始設定; 選擇生

Android設定EditText輸入型別(setInputType()方法android:inputType屬性)

在Android開發過程中,我們經常使用到EditText控制元件,並且會根據各種需求設定它的輸入型別。設定EditText輸入型別主要有兩種方法,一種是使用EditText的setInputType()方法,另一種是在佈局檔案中使用android:inputT

Android實現滑動的七種方法總結

在android開發中,滑動對一個app來說,是非常重要的,流暢的滑動操作,能夠給使用者帶來用好的體驗,那麼本次就來講講android中實現滑動有哪些方式。其實滑動一個View,本質上是移動一個View,改變其當前所屬的位置,要實現View的滑動,就必須監聽使用者觸

android隱藏狀態列全屏顯示和隱藏虛擬按鍵

廢話不多說,直接貼程式碼 //去除title requestWindowFeature(Window.FEATURE_NO_TITLE);   //去掉Activity上面的狀態列 getWindow().setFlags(WindowManager.La

關於產品的一些思考——小米電話錄音

    小米手機(MIUI)撥號可以設定指定聯絡人錄音,這是很讚的功能,可以自動對設定的聯絡人來電錄音,可是覺得還有可以做的更好的地方。     1.去電無法自動錄音     既然設定了指定聯絡人錄音

android換膚原理解讀

如下是解讀demo的連結,自行下載 由於是開源的,而且對於想了解換膚功能的童鞋這個demo實在是通俗易懂,原理也很清晰,所以忍不住想要記錄一下, 題外話:附上一篇換膚技術總結的部落格,這是一篇動態換膚與本地換膚(傳統的theme)換膚優劣勢的詳細比較,需要的童鞋,可以詳細

Android實現電話錄音功能

需求分析 電話錄音是在通話的時候進行錄音,所以需要使用一個服務來完成功能。 需要監聽電話的狀態,分為三種狀態: 空閒狀態 TelephonyManager.CALL_STATE_IDLE 響鈴狀態 TelephonyManager.CALL_STATE_

Android 四大圖片快取原理特性對比

Universal ImageLoader 是很早開源的圖片快取,在早期被很多應用使用。 Picasso 是 Square 開源的專案,且他的主導者是 JakeWharton,所以廣為人知。 Glide 是 Google 員工的開源專案,被一些 Goog

Android自動電話錄音開發過程及問題

已經做好了Android下的一個電話錄音軟體,利用的是service和broadcast廣播,功能包括開機自啟,來/去電自動錄音.雖然還存在一些問題,但功能無影響.程式碼放在了github上:檢視原始碼

華爾街遠鄰 | 與歷史上數次比特幣暴跌相比目前跌幅太溫柔

在經歷了週中的大跌之後,這兩天數字貨幣市場終於迎來了反彈。這周,比特幣價格一度跌破了6000美元的心理防線。微信群裡面一片悲觀,很多人說這一輪會跌到4500美元,3000美元,有的人甚至說比特幣已經壽終正寢,幾個月以後價格就會歸零。。 其實,這周的波動只是今年年初比特幣

Android Dialog設定TYPE_SYSTEM_ALERT 小米魅族手機不顯示問題

在對話方塊初始的時候,設定 Java程式碼   mProgressDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);   可以讓對話方塊始終顯示在其他應用程式的window

java語言 Map集合 的常用的最最基本的功能其他方法在學習中有待更新......

1,新增功能 2,刪除功能 3,判斷功能 . . . package map; import java.util.Collection; import java.util.HashMap; import java.util.Map; publ

談談Vue資料雙向繫結原理看看你的回答打幾分

面試官的這個問題也可以理解成為“你是怎麼理解Vue資料繫結,知道它背後實現的原理麼”。一般剛畢業的前端新人可能會說,用v-model。(當然,這可能是句廢話) 如果簡單說下v-model指令,是Vue的語法糖之類的,可能不會讓面試官滿意,也看不出你對Vue的熟練程度。只能說

【PHP7 流程控制和函式 習題五】打印出100以內的質數一行顯示5個(質數是被1跟自身整除的數1不是質數)

一、解法一: 1)思路: 判斷是否是質數; function is_prime($num) { for ($i = 2; $i < $num; $i++) { // 判斷是否為質數 if ($num % $i =