Android 利用服務實現電話監聽-來電-接聽-掛斷,進行錄音
在要oncreate 中實行:
public void onCreate() { super.onCreate(); Log.i("TAG", "服務啟動了");// 對電話的來電狀態進行監聽 TelephonyManager telManager = (TelephonyManager) this .getSystemService(Context.TELEPHONY_SERVICE); // 注冊一個監聽器對電話狀態進行監聽 telManager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); }</pre>
實現MyPhoneStateListener :
private class MyPhoneStateListener extends PhoneStateListener { MediaRecorder recorder; File audioFile; String phoneNumber;public void onCallStateChanged(int state, String incomingNumber) { switch (state) { case TelephonyManager.CALL_STATE_IDLE: /* 無任何狀態時 */ if (recorder != null) { recorder.stop();// 停止刻錄 recorder.reset();// 重設 recorder.release();// 刻錄完成一定要釋放資源 } break; case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起電話時 */ try { recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 設置音頻采集原 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 內容輸出格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 音頻編碼方式 // recorder.setOutputFile("/sdcard/myvoice.amr"); audioFile = new File( Environment.getExternalStorageDirectory(), phoneNumber + "_" + System.currentTimeMillis() + ".3gp"); recorder.setOutputFile(audioFile.getAbsolutePath()); Log.i("TAG", audioFile.getAbsolutePath()); recorder.prepare(); // 預期準備 recorder.start(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } break; case TelephonyManager.CALL_STATE_RINGING: /* 電話進來時 */ phoneNumber = incomingNumber; break; default: break; } super.onCallStateChanged(state, incomingNumber); } }</pre></span> 通過上續兩個對應的步驟即可以實現通過server對電話的監聽工作,在CALL_STATE_IDLE無狀態(即空閑狀態),CALL_STATE_OFFHOOK 接通電話(即掛起),CALL_STATE_RINGING 電話進來(即來電時)我們可以在每個狀態中執行我們想要達到目的。<p></p>
本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!