監聽用戶電話(錄音)

自定義一個服務類,繼承Service,開啓該類後,在其onCreate方法裏拿到系統的電話管理服務,然後在合適的時候對通話內容進行錄音:

public class OutCallServices extends Service {

	// 服務一旦開啓,如果用戶不在後臺手動關閉,將一直運行
	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		System.out.println("服務被創建了");

		// 監聽用戶電話狀態的變化
		// 電話管理器 電話管理的服務
		TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);

		// 爲用戶電話狀態變化添加監聽
		tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE);
	}

	private class MyListener extends PhoneStateListener {

		private MediaRecorder recorder;
		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			// TODO Auto-generated method stub
			super.onCallStateChanged(state, incomingNumber);
			
			try {
				switch(state){
				case TelephonyManager.CALL_STATE_IDLE://空閒狀態 沒有通話 沒有響鈴
					if(recorder != null){
						recorder.stop();
						recorder.reset();   // You can reuse the object by going back to setAudioSource() step
						recorder.release(); // Now the object cannot be reused
						recorder = null;
					}
					break;
				
				case TelephonyManager.CALL_STATE_RINGING://響鈴狀態
					System.out.println("發現電話號碼:"+incomingNumber);
					
					recorder = new MediaRecorder();
					
					//Sets the audio source to be used for recording
					//Microphone audio source
					recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
					//Sets the format of the output file produced during recording
					//3GPP media file format
					recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
					//Sets the audio encoder to be used for recording
					//AMR (Narrowband) audio codec音頻編碼
					recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
					
					recorder.setOutputFile("/sdcard/"+System.currentTimeMillis()+".3gp");
					recorder.prepare();
					break;
					
				case TelephonyManager.CALL_STATE_OFFHOOK://通話狀態
					if(recorder != null){
						
						recorder.start();   // Recording is now started
					}
					break;
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章