Android简易实战教程--第三十六话《电话录音》
今天完成一个简单的电话录音功能,即接通电话后,立即录下自己打电话的声音。实现起来比较简单:一个服务,一个TelephonyManager、一个MediaRecorder就够了。
1、布局提供一个开启录音服务的按钮。
2、服务里面代码如下:(代码详细解释都在里面了)
package com.itydl.recorder; import android.app.Service; import android.content.Intent; import android.media.MediaRecorder; import android.os.IBinder; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; public class RecorderService extends Service { private MediaRecorder recorder; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); //拿到电话管理器 TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); //监听电话状态 //events:决定PhoneStateListener侦听什么内容,如:LISTEN_SIGNAL_STRENGTHS表示这个监听器监听信号强弱改变 tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE); } class MyListener extends PhoneStateListener{ //一旦电话状态改变,此方法调用 @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE: System.out.println("空闲"); if(recorder != null){ //结束录音、释放资源 recorder.stop(); recorder.release(); recorder = null; } break; case TelephonyManager.CALL_STATE_RINGING: System.out.println("响铃"); //初始化录音机 if(recorder == null){ recorder = new MediaRecorder(); //设置来源,默认麦克风MIC recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置输出格式,3GP recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //文件名称,录到哪里以及录下后的音频名称,因为上边输出格式使用3gp,因此使用.3gp作为后缀名 recorder.setOutputFile("sdcard/luyin.3gp"); //音频编码 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try { //准备。之后就可以开始录音了 recorder.prepare(); } catch (Exception e) { e.printStackTrace(); } } break; case TelephonyManager.CALL_STATE_OFFHOOK: System.out.println("摘机"); //开始录音 if(recorder != null){ recorder.start(); } break; } } } }
而主活动里面的代码就是点击事件,开启这个录音服务。
package com.itydl.recorder; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){ Intent intent = new Intent(this, RecorderService.class); startService(intent); } }电话录音功能,需要配置一些权限,如下:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 录音权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
当然、服务一定要记得载清单文件完成配置
<service android:name="com.itydl.recorder.RecorderService"></service>
运行案例,给我们的手机或者模拟器打个电话,接听聊几句,我们会发现在sdcard根目录多了一个叫luyin.3gp的音频文件。这样,一个简易的录音功能就完毕了~~