利用服务实现电话监听-来电-接听-挂断,进行录音
在要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 电话进来(即来电时)
我们可以在每个状态中执行我们想要达到目的。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
