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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!