版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/81327067
录音分为环境录音和通话录音。
环境录音:
public class audio {
private static MediaRecorder mMediaRecorder;
private static String fileName= "";
@SuppressLint("LongLogTag")
public static void startRecord() {
// 开始录音
/* ①Initial:实例化MediaRecorder对象 */
if (mMediaRecorder == null)
mMediaRecorder = new MediaRecorder();
try {
/* ②setAudioSource/setVedioSource */
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置麦克风
/*
* ②设置输出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default THREE_GPP(3gp格式
* ,H263视频/ARM音频编码)、MPEG-4、RAW_AMR(只支持音频且音频编码要求为AMR_NB)
*/
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
/* ②设置音频文件的编码:AAC/AMR_NB/AMR_MB/Default 声音的(波形)的采样 */
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
fileName = DateFormat.format("yyyyMMdd_HHmmss", Calendar.getInstance(Locale.CHINA)) + ".m4a";
MakeFile.makeRootDirectory(Environment.getExternalStorageDirectory().getPath()+"/Android/audio/");
String filePath = Environment.getExternalStorageDirectory().getPath()+"/Android/audio/" + fileName;
/* ③准备 */
mMediaRecorder.setOutputFile(filePath);
mMediaRecorder.prepare();
/* ④开始 */
mMediaRecorder.start();
} catch (IllegalStateException e) {
Log.i("call startAmr(File mRecAudioFile) failed!" ,e.getMessage());
} catch (IOException e) {
Log.i("call startAmr(File mRecAudioFile) failed!", e.getMessage());
}
}
public static void stopRecord() {
try {
mMediaRecorder.stop();
mMediaRecorder.release();
mMediaRecorder = null;
} catch (RuntimeException e) {
Log.e("errp",e.toString());
mMediaRecorder.reset();
mMediaRecorder.release();
mMediaRecorder = null;
}
}
}
通话录音,在service里面,可以写守护进程:
import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import java.io.File;
public class SystemService extends Service {
// 电话管理器
private TelephonyManager tm;
// 监听器对象
private MyListener listener;
//声明录音机
private MediaRecorder mediaRecorder;
@Override
public IBinder onBind(Intent intent) {
return null;
}
/**
* 服务创建的时候调用的方法
*/
@Override
public void onCreate() {
// 后台监听电话的呼叫状态。
// 得到电话管理器
tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);
listener = new MyListener();
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
super.onCreate();
}
private class MyListener extends PhoneStateListener {
// 当电话的呼叫状态发生变化的时候调用的方法
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
try {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE://空闲状态。
if(mediaRecorder!=null){
//8.停止捕获
mediaRecorder.stop();
//9.释放资源
mediaRecorder.release();
mediaRecorder = null;
//TODO 这个地方你可以将录制完毕的音频文件上传到服务器,这样就可以监听了
Log.i("SystemService", "音频文件录制完毕,可以在后台上传到服务器");
}
break;
case TelephonyManager.CALL_STATE_RINGING://零响状态。
break;
case TelephonyManager.CALL_STATE_OFFHOOK://通话状态
//开始录音
//1.实例化一个录音机
mediaRecorder = new MediaRecorder();
//2.指定录音机的声音源
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//3.设置录制的文件输出的格式
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
//4.指定录音文件的名称
File file = new File(Environment.getExternalStorageDirectory().getPath()+"/Android/audio/",System.currentTimeMillis()+".m4a");
mediaRecorder.setOutputFile(file.getAbsolutePath());
//5.设置音频的编码
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
//6.准备开始录音
mediaRecorder.prepare();
//7.开始录音
mediaRecorder.start();
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 服务销毁的时候调用的方法
*/
@Override
public void onDestroy() {
super.onDestroy();
// 取消电话的监听,采取线程守护的方法,当一个服务关闭后,开启另外一个服务,除非你很快把两个服务同时关闭才能完成
Intent i = new Intent(this,SystemService2.class);
startService(i);
tm.listen(listener, PhoneStateListener.LISTEN_NONE);
listener = null;
}
}
权限:
<!--额外的权限-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>