name="android.permission.READ_PHONE_STATE"/>
那我们先来调试一下,我们点击启动服务
现在我们可以在响铃就开始准备录音资源了
//电话响铃
caseTelephonyManager.CALL_STATE_RINGING:
Log.i("myListener","电话响铃");
//判断硬件是否支持录音
if(recorder==null){
getRecorder();
}
break;
录音方法
/**
*通话录音
*/
privatevoidgetRecorder(){
recorder=newMediaRecorder();
//麦克风
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置格式3GP
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//设置保存目录权限
recorder.setOutputFile("sdcard/audio.3gp");
//设置音频编码
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try{
//准备录音
recorder.prepare();
}catch(IOExceptione){
e.printStackTrace();
}
}
这里准备好了之后,我们只要接通了就开始录音
//正在通话
caseTelephonyManager.CALL_STATE_OFFHOOK:
Log.i("myListener","电话通话");
if(recorder!
=null){
//开始录音
recorder.start();
}
break;
当我们挂断电话,电话状态重新回到空闲的时候就停止并且释放资源
//电话空闲
caseTelephonyManager.CALL_STATE_IDLE:
Log.i("myListener","电话空闲");
if(recorder!
=null){
//停止录音
recorder.stop();
//释放资源
recorder.release();
recorder=null;
}
break;
我们来测试一下,我们拨打一个电话,状态是这样的
我们去目录下翻一翻
这里,可以看到有一个audio.3gp说明我们录音成功了
完整代码
MyService
packagecom.lgl.servicedemo;
importandroid.app.Service;
importandroid.content.Intent;
importandroid.media.MediaRecorder;
importandroid.os.IBinder;
importandroid.telephony.PhoneStateListener;
importandroid.telephony.TelephonyManager;
importandroid.util.Log;
importjava.io.IOException;
/**
*电话录音
*Createdbylglon16/4/10.
*/
publicclassMyServiceextendsService{
//录音
privateMediaRecorderrecorder;
@Override
publicIBinderonBind(Intentintent){
returnnull;
}
@Override
publicintonStartCommand(Intentintent,intflags,intstartId){
returnsuper.onStartCommand(intent,flags,startId);
}
@Override
publicvoidonCreate(){
super.onCreate();
getService();
}
/**
*获取电话状态
*/
publicvoidgetService(){
//服务一创建就监听
TelephonyManagertm=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);
tm.listen(newmyListener(),PhoneStateListener.LISTEN_CALL_STATE);
}
classmyListenerextendsPhoneStateListener{
//电话状态改变的回调
@Override
publicvoidonCallStateChanged(intstate,StringincomingNumber){
super.onCallStateChanged(state,incomingNumber);
//判断当前的状态
switch(state){
//电话空闲
caseTelephonyManager.CALL_STATE_IDLE:
Log.i("myListener","电话空闲");
if(recorder!
=null){
//停止录音
recorder.stop();
//释放资源
recorder.release();
recorder=null;
}
break;
//电话响铃
caseTelephonyManager.CALL_STATE_RINGING:
Log.i("myListener","电话响铃");
//判断硬件是否支持录音
if(recorder==null){
getRecorder();
}
break;
//正在通话
caseTelephonyManager.CALL_STATE_OFFHOOK:
Log.i("myListener","电话通话");
if(recorder!
=null){
//开始录音
recorder.start();
}
break;
}
}
}
/**
*通话录音
*/
privatevoidgetRecorder(){
recorder=newMediaRecorder();
//麦克风
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置格式3GP
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//设置保存目录权限
recorder.setOutputFile("sdcard/audio.3gp");
//设置音频编码
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try{
//准备录音
recorder.prepare();
}catch(IOExceptione){
e.printStackTrace();
}
}
@Override
publicvoidonDestroy(){
super.onDestroy();
}
}
5.Service的两种启动方式
servic启动有两种方式,我们来比对一下。
我们写一个新建一个项目ServiceTwo
activity_main.xml
xmlversion="1.0"encoding="utf-8"?
>
android="
xmlns:
tools="
android:
layout_width="match_parent"
android:
layout_height="match_parent"
android:
gravity="center"
android:
orientation="vertical">