在要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);
}
实现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);
}
}
通过上续两个对应的步骤即可以实现通过server对电话的监听工作,在CALL_STATE_IDLE无状态(即空闲状态),CALL_STATE_OFFHOOK 接通电话(即挂起),CALL_STATE_RINGING 电话进来(即来电时)
我们可以在每个状态中执行我们想要达到目的。