电话监听器
- 代码实现步骤
- 开启一个服务 服务在后台监听电话的状态
public class PhoneService extends Service { private static final String TAG = "PhoneService"; private MediaRecorder recorder; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); tm.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); super.onCreate(); } class MyPhoneStateListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { switch (state) { case TelephonyManager.CALL_STATE_IDLE://空闲 if (recorder != null) { recorder.stop();//停止录音 recorder.reset(); recorder.release(); } Log.e(TAG, "onCallStateChanged:CALL_STATE_IDLE "); break; case TelephonyManager.CALL_STATE_OFFHOOK://通话 if (recorder == null) { recorder = new MediaRecorder(); recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置音频的来源 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置输出文件 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置音频编码方式 recorder.setOutputFile(getFilesDir().getPath() + "/" + "luyin.3gp");//指定文件的存放路径 try { recorder.prepare();//准备录音 } catch (IOException e) { e.printStackTrace(); } } recorder.start();//开始录音 Log.e(TAG, "onCallStateChanged: CALL_STATE_OFFHOOK"); break; case TelephonyManager.CALL_STATE_RINGING://响铃 Log.e(TAG, "onCallStateChanged: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(getFilesDir().getPath() + "/" + "luyin.3gp");//指定文件的存放路径 try { recorder.prepare();//准备录音 } catch (IOException e) { e.printStackTrace(); } break; } super.onCallStateChanged(state, incomingNumber); } } }
-
- 具体实现录音功能
switch (state) { case TelephonyManager.CALL_STATE_IDLE://空闲 if (recorder != null) { recorder.stop();//停止录音 recorder.reset(); recorder.release(); } Log.e(TAG, "onCallStateChanged:CALL_STATE_IDLE "); break; case TelephonyManager.CALL_STATE_OFFHOOK://通话 if (recorder == null) { recorder = new MediaRecorder(); recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置音频的来源 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置输出文件 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置音频编码方式 recorder.setOutputFile(getFilesDir().getPath() + "/" + "luyin.3gp");//指定文件的存放路径 try { recorder.prepare();//准备录音 } catch (IOException e) { e.printStackTrace(); } } recorder.start();//开始录音 Log.e(TAG, "onCallStateChanged: CALL_STATE_OFFHOOK"); break; case TelephonyManager.CALL_STATE_RINGING://响铃 Log.e(TAG, "onCallStateChanged: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(getFilesDir().getPath() + "/" + "luyin.3gp");//指定文件的存放路径 try { recorder.prepare();//准备录音 } catch (IOException e) { e.printStackTrace(); } break; } super.onCallStateChanged(state, incomingNumber); }
-
- 添加对应权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />