Android 來去電自動錄音(一)

        本文是關於android來去電自動錄音的一個實現方法介紹。來去電自動錄音的關鍵在於如何×××電話狀態的轉變:
        i、來電的狀態的轉換以下(紅色標記是咱們要用到的狀態)
        空閒(IDEL)——> 響鈴(RINGING)——> 接聽(ACTIVE)——> 掛斷(經歷DISCONNECTING——DISCONNECTED)——> 空閒(IDEL) 
        或者  空閒(IDEL)——> 響鈴(RINGING)——> 拒接 ——> 空閒(IDEL)
        ii、去電狀態的轉換以下
        空閒(IDEL)——> 撥號 (DIALING)——> (對方)響鈴(ALERTING) ——> 創建鏈接(ACTIVE)—— 掛斷(經歷DISCONNECTING——DISCONNECTED)——> 空閒(IDEL) 
        或者 空閒(IDEL)——> 撥號 (DIALING)——> (對方)響鈴(ALERTING)——> 掛斷/對方拒接 ——> 空閒(IDEL)
下面就分別就 來電 和 去電 這兩種狀態分析並實現。android

        一、先進行來電的分析和實現,相對去電來講,來電狀態的轉換檢測要簡單些。android api 中的PhoneStateListener 類提供了相應的方法 但咱們須要覆蓋 其中的 onCallStateChanged(int state, String incomingNumber) 方法便可實現來電狀態的檢測,並在此基礎上添加錄音功能便可。其中 state 參數就是各類電話狀態,到時咱們將它跟下面咱們要用到的狀態進行比較,如果電話處在咱們想要的狀態上,則進行一系列操做,不然就無論他。想要獲取這些狀態,還須要另外一個電話相關類,那就是 TelephonyManager, 該類 提供了一些電話狀態,其中咱們要用到的是:TelephonyManager.CALL_STATE_IDLE(空閒)、TelephonyManager.CALL_STATE_OFFHOOK(摘機)和 TelephonyManager.CALL_STATE_RINGING(來電響鈴)這三個狀態。判別這三種狀態,能夠繼承 android.telephony.PhoneStateListener 類,實現上面提到的 onCallStateChanged(int state, String incomingNumber) 方法,請看以下代碼api

  
  
  
  
  1. public class TelListener extends PhoneStateListener {  
  2.   
  3.     @Override  
  4.     public void onCallStateChanged(int state, String incomingNumber) {  
  5.         super.onCallStateChanged(state, incomingNumber);  
  6.   
  7.         switch (state) {  
  8.         case TelephonyManager.CALL_STATE_IDLE: // 空閒狀態,即無來電也無去電  
  9.             Log.i("TelephoneState""IDLE");  
  10.             //此處添加一系列功能代碼 
  11.             break;  
  12.         case TelephonyManager.CALL_STATE_RINGING: // 來電響鈴  
  13.             Log.i("TelephoneState""RINGING");  
  14.             //此處添加一系列功能代碼 
  15.             break;  
  16.         case TelephonyManager.CALL_STATE_OFFHOOK: // 摘機,即接通 
  17.             Log.i("TelephoneState""OFFHOOK");  
  18.             //此處添加一系列功能代碼 
  19.             break;  
  20.         }  
  21.   
  22.         Log.i("TelephoneState", String.valueOf(incomingNumber));  
  23.     }  
  24.   
  25. }  

有了以上 來電狀態監聽代碼還不足以實現監聽功能,還須要在咱們的一個Activity或者Service中實現監聽,方法很簡單,代碼以下ide

  
  
  
  
  1. /** 
  2. * 在activity 或者 service中加入以下代碼,以實現來電狀態監聽 
  3. */ 
  4. TelephonyManager telMgr = (TelephonyManager)context.getSystemService( 
  5.                 Context.TELEPHONY_SERVICE); 
  6.         telMgr.listen(new TelListener(), PhoneStateListener.LISTEN_CALL_STATE); 

這樣就實現了來電狀態監聽功能,但要可以在設備中跑起來,這還不夠,它還須要兩個獲取手機電話狀態的權限spa

  
  
  
  
  1. <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
  2. <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 

這樣的話就能夠跑起來了。xml

        說到這,我想若是你能夠實現錄音功能的話,在此基礎上實現來電自動錄音就應該沒什麼問題了,不過請容我簡單羅嗦幾句。既然是來電,那麼要想錄音的話,那麼應該就是在監聽到 TelephonyManager.CALL_STATE_OFFHOOK 的狀態時開啓錄音機開始錄音, 在 監聽到TelephonyManager.CALL_STATE_IDLE 的狀態時 關閉錄音機中止錄音。這樣,來電錄音功能就完成了,不要忘記錄音功能一樣須要權限blog

  
  
  
  
  1. <uses-permission android:name="android.permission.RECORD_AUDIO"/>  
  2.   
  3. <!-- 要存儲文件或者建立文件夾的話還須要如下兩個權限 -->  
  4. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
  5. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

 

未完,繼續閱讀繼承

另附 工程源代碼 get

相關文章
相關標籤/搜索