电话监听器

电话监听器 

  • 代码实现步骤 
    • 开启一个服务 服务在后台监听电话的状态
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" />

猜你喜欢

转载自www.cnblogs.com/nangongyibin/p/10232590.html