Android 利用服務實現電話監聽-來電-接聽-掛斷,進行錄音

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