先声明:来自黑马的教学视频
服务的生命周期:onCreate() →onStartCommand(Intent intent, int flags, int startId)→onStart(Intent intent, int startId)→onDestroy()
当重复创建服务时(不销毁服务),onCreate()只执行一次
通过电话管理者来监听手机的通话状态:
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE);
内部类MyListener的实现:
private class MyListener extends PhoneStateListener {
private MediaRecorder recorder;
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
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
break;
}
case TelephonyManager.CALL_STATE_OFFHOOK:// 接听状态
if (recorder != null) {
recorder.start(); // Recording is now started
break;
}
case TelephonyManager.CALL_STATE_RINGING:// 响铃状态
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置录音源是麦克风
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//编码方式
recorder.setOutputFile("/sdcard/" + "record" + ".3gpp");//录音的存放路径和文件名
try {
recorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
default:
break;
}
}
}
代码没在真机上测试,不知道有没有错误,不过自己明白就好啦。