/**
* 理解成一个没有界面的Activity
*
*/
public class PhoneService extends Service {
// 电话管理器,系统的一个服务,长期后台运行没有界面
private TelephonyManager tm;
private MyListener listener;
private MediaRecorder recorder;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
// 监听手机的通话状态。
tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
listener = new MyListener();
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
super.onCreate();
}
private class MyListener extends PhoneStateListener {
// 当呼叫的状态发生变化调用的方法。
@Override
public void onCallStateChanged(int state, String incomingNumber) {
System.out.println("来电号码:"+incomingNumber);
// 零响 接通状态 空闲
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:// 空闲
if(recorder!=null){
recorder.stop();
recorder.release();
recorder = null;
System.out.println("上传文件到服务器。");
}
break;
case TelephonyManager.CALL_STATE_RINGING:// 响铃状态
break;
case TelephonyManager.CALL_STATE_OFFHOOK://电话接通
System.out.println("开始录音。。。");
//开始录音
startRecorder(incomingNumber);
break;
}
super.onCallStateChanged(state, incomingNumber);
}
}
@Override
public void onDestroy() {
// 服务停止的时候 取消监听全部的状态。
tm.listen(listener, PhoneStateListener.LISTEN_NONE);
super.onDestroy();
}
/**
* 开始录音
* @param incomingNumber
*/
public void startRecorder(String incomingNumber) {
try {
//1.创建一个录音机的实例
recorder = new MediaRecorder();
//2.设置路径的数据源
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//3.设置输入文件的格式
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//4.设置保存的文件名称
recorder.setOutputFile("/mnt/sdcard/"+incomingNumber+".3gp");
System.out.println("/mnt/sdcard/"+incomingNumber+".3gp");
//5.设置音频编码方式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//6.准备开始录音
recorder.prepare();
recorder.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}