Android 利用服务实现电话监听-来电-接听-挂断,进行录音
在要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 电话进来(即来电时)我们可以在每个状态中执行我们想要达到目的。