需求分析:

        记录通话过程中的录音,并保存到指定路径~


      


知识点:1.手机开机发出广播,广播接受者收到通知,开启service服务 


              2.Service工作流程:


                    1.获取手机管理对象·


                    2.注冊监听器,对应手机状态


                    3.依据手机状态(振铃、通话、空暇),创建Mediaplay对象,暂停


 这里监听手机状态,加入权限


   <uses-permission android:name="android.permission.READ_PHONE_STATE"/>


代码:



TelephonyManager manager=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);//获取电话管理


  manager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);


    //用电话管理器注冊一个监听器,监听电话状态


注意:手机状态监听这,能够监听多个状态,LISTEN_CALL_STATE监听的是手机状态的变化,下面该监听器其它的监听对象


手机状态改变的state三种值:空暇、通话、挂断




依据三种状态,处理Mediaplayer,代码




public void onCallStateChanged(int state, String incomingNumber) {// 电话状态改变时运行该方法


switch (state) {


case TelephonyManager.CALL_STATE_RINGING:


Log.d("Debug","振铃");


num = incomingNumber;// 振铃时, 记录号码


break;


case TelephonyManager.CALL_STATE_OFFHOOK:


Log.d("Debug","開始录音");


startRecording();// 摘机时, 開始录音


break;


case TelephonyManager.CALL_STATE_IDLE:


Log.d("Debug","空暇状态");


stopRecording();// 空暇时, 结束录音


break;


}


}


思考:假设手机没有振铃?




停止录音:


private void stopRecording() {


if (mRecorder != null) {


mRecorder.stop(); // 停止


        mRecorder.release();      // 释放资源


        mRecorder = null; // 垃圾回收


}


}


開始录音:


private void startRecording() {


try {


Log.d("Debug", "startRecording");


mRecorder = new MediaRecorder(); // 创建媒体记录器


mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置音频源


mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 设置输出格式


mRecorder.setOutputFile("/mnt/sdcard/" + num + "_" + System.currentTimeMillis() + ".3gp");                             // 设置输出文件路径


mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 设置编码


mRecorder.prepare(); // 准备


mRecorder.start(); // 開始


} catch (Exception e) {


e.printStackTrace();


} }}}


总结:MediaPlayer操作过程,停止和录音过程~,这里使用到了sdcard所以,必须声明权限。



     <uses-permission android:name="android.permission.RECORD_AUDIO"/>//同意程序进行录音


     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //写入存储卡




清单文件的配置信息:


 <receiver  android:name=".PhoneBroacast">


            <intent-filter >


                <action android:name="android.intent.action.BOOT_COMPLETED"/>


            </intent-filter>


        </receiver>


        <service android:name=".PhoneService">   


        </service>