监听手机录音
需求分析: 記錄通話過程中的錄音,并保存到指定路徑~
知識點:1.手機開機發出廣播,廣播接受者收到通知,開啟service服務? 2.Service工作流程:
1.獲取手機管理對象·
2.注冊監聽器,對應手機狀態
3.依據手機狀態(振鈴、通話、空暇),創建Mediaplay對象,暫停 這里監聽手機狀態,加入權限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 代碼: TelephonyManager manager=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);//獲取電話管理 ? manager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); ?//用電話管理器注冊一個監聽器,監聽電話狀態 注意:手機狀態監聽這,能夠監聽多個狀態,LISTEN_CALL_STATE監聽的是手機狀態的變化,下面該監聽器其它的監聽對象 手機狀態改變的state三種值:空暇、通話、掛斷
依據三種狀態,處理Mediaplayer,代碼
public void onCallStateChanged(int state, String incomingNumber) { // 電話狀態改變時運行該方法 switch (state) { case TelephonyManager.CALL_STATE_RINGING: Log.d("Debug","振鈴"); num = incomingNumber; // 振鈴時, 記錄號碼 break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.d("Debug","開始錄音"); startRecording(); // 摘機時, 開始錄音 break; case TelephonyManager.CALL_STATE_IDLE: Log.d("Debug","空暇狀態"); stopRecording(); // 空暇時, 結束錄音 break; } } 思考:假設手機沒有振鈴?
停止錄音: private void stopRecording() { if (mRecorder != null) { mRecorder.stop();// 停止 mRecorder.release(); ? ?// 釋放資源 mRecorder = null;// 垃圾回收 } } 開始錄音: private void startRecording() { try { Log.d("Debug", "startRecording"); mRecorder = new MediaRecorder();?// 創建媒體記錄器 mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 設置音頻源 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 設置輸出格式 mRecorder.setOutputFile("/mnt/sdcard/" + num + "_" + System.currentTimeMillis() + ".3gp");// 設置輸出文件路徑 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 設置編碼 mRecorder.prepare();// 準備 mRecorder.start();// 開始 } catch (Exception e) { e.printStackTrace(); }}}} 總結:MediaPlayer操作過程,停止和錄音過程~,這里使用到了sdcard所以,必須聲明權限。 ? ? ?<uses-permission android:name="android.permission.RECORD_AUDIO"/>//同意程序進行錄音 ? ? ?<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //寫入存儲卡
清單文件的配置信息: ?<receiver ?android:name=".PhoneBroacast"> ? ? ? ? ? ? <intent-filter > ? ? ? ? ? ? ? ? <action android:name="android.intent.action.BOOT_COMPLETED"/> ? ? ? ? ? ? </intent-filter> ? ? ? ? </receiver> ? ? ? ? <service android:name=".PhoneService"> ?? ? ? ? ? </service>
知識點:1.手機開機發出廣播,廣播接受者收到通知,開啟service服務? 2.Service工作流程:
1.獲取手機管理對象·
2.注冊監聽器,對應手機狀態
3.依據手機狀態(振鈴、通話、空暇),創建Mediaplay對象,暫停 這里監聽手機狀態,加入權限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 代碼: TelephonyManager manager=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);//獲取電話管理 ? manager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); ?//用電話管理器注冊一個監聽器,監聽電話狀態 注意:手機狀態監聽這,能夠監聽多個狀態,LISTEN_CALL_STATE監聽的是手機狀態的變化,下面該監聽器其它的監聽對象 手機狀態改變的state三種值:空暇、通話、掛斷
依據三種狀態,處理Mediaplayer,代碼
public void onCallStateChanged(int state, String incomingNumber) { // 電話狀態改變時運行該方法 switch (state) { case TelephonyManager.CALL_STATE_RINGING: Log.d("Debug","振鈴"); num = incomingNumber; // 振鈴時, 記錄號碼 break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.d("Debug","開始錄音"); startRecording(); // 摘機時, 開始錄音 break; case TelephonyManager.CALL_STATE_IDLE: Log.d("Debug","空暇狀態"); stopRecording(); // 空暇時, 結束錄音 break; } } 思考:假設手機沒有振鈴?
停止錄音: private void stopRecording() { if (mRecorder != null) { mRecorder.stop();// 停止 mRecorder.release(); ? ?// 釋放資源 mRecorder = null;// 垃圾回收 } } 開始錄音: private void startRecording() { try { Log.d("Debug", "startRecording"); mRecorder = new MediaRecorder();?// 創建媒體記錄器 mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 設置音頻源 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 設置輸出格式 mRecorder.setOutputFile("/mnt/sdcard/" + num + "_" + System.currentTimeMillis() + ".3gp");// 設置輸出文件路徑 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 設置編碼 mRecorder.prepare();// 準備 mRecorder.start();// 開始 } catch (Exception e) { e.printStackTrace(); }}}} 總結:MediaPlayer操作過程,停止和錄音過程~,這里使用到了sdcard所以,必須聲明權限。 ? ? ?<uses-permission android:name="android.permission.RECORD_AUDIO"/>//同意程序進行錄音 ? ? ?<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //寫入存儲卡
清單文件的配置信息: ?<receiver ?android:name=".PhoneBroacast"> ? ? ? ? ? ? <intent-filter > ? ? ? ? ? ? ? ? <action android:name="android.intent.action.BOOT_COMPLETED"/> ? ? ? ? ? ? </intent-filter> ? ? ? ? </receiver> ? ? ? ? <service android:name=".PhoneService"> ?? ? ? ? ? </service>
總結
- 上一篇: silverlight 上下标
- 下一篇: TF卡翻盖式卡座