本文实例讲述了Android编程录音工具类RecorderUtil定义与用法。分享给大家供大家参考,具体如下:
以下工具类都是经过实战开发验证都是可以直接复制使用的。
录音工具类介绍:
录音工具类主要平时用来开发语音聊天的,在微信和QQ上该工具类都是常用的,因为语音聊天。
使用硬件一般都要开权限,别忘了。这里还需要搭配 AndroidFileUtil 类使用,为了方便才这么封装的
import android.media.MediaRecorder;
import android.util.Log;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* 录音工具
*/
public class RecorderUtil {
private static final String TAG = "RecorderUtil";
private String mFileName = null;
private MediaRecorder mRecorder = null;
private long startTime;
private long timeInterval;
private boolean isRecording;
public RecorderUtil(){
mFileName = FileUtil.getCacheFilePath("tempAudio");
}
/**
* 开始录音
*/
public void startRecording() {
if (mFileName == null) return;
if (isRecording){
mRecorder.release();
mRecorder = null;
}
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
startTime = System.currentTimeMillis();
try {
mRecorder.prepare();
mRecorder.start();
isRecording = true;
} catch (Exception e){
Log.e(TAG, "prepare() failed");
}
}
/**
* 停止录音
*/
public void stopRecording() {
if (mFileName == null) return;
timeInterval = System.currentTimeMillis() - startTime;
try{
if (timeInterval 1000){
mRecorder.stop();
}
mRecorder.release();
mRecorder = null;
isRecording =false;
}catch (Exception e){
Log.e(TAG, "release() failed");
}
}
/**
* 取消语音
*/
public synchronized void cancelRecording() {
if (mRecorder != null) {
try {
mRecorder.release();
mRecorder = null;
} catch (Exception e) {
e.printStackTrace();
}
File file = new File(mFileName);
file.deleteOnExit();
}
isRecording =false;
}
/**
* 获取录音文件
*/
public byte[] getDate() {
if (mFileName == null) return null;
try{
return readFile(new File(mFileName));
}catch (IOException e){
Log.e(TAG, "read file error" + e);
return null;
}
}
/**
* 获取录音文件地址
*/
public String getFilePath(){
return mFileName;
}
/**
* 获取录音时长,单位秒
*/
public long getTimeInterval() {
return timeInterval/1000;
}
/**
* 将文件转化为byte[]
*
* @param file 输入文件
*/
private static byte[] readFile(File file) throws IOException {
// Open file
RandomAccessFile f = new RandomAccessFile(file, "r");
try {
// Get and check length
long longlength = f.length();
int length = (int) longlength;
if (length != longlength)
throw new IOException("File size = 2 GB");
// Read file and return data
byte[] data = new byte[length];
f.readFully(data);
return data;
} finally {
f.close();
}
}
}
使用步骤:
1. 首先private RecorderUtil recorder = new RecorderUtil();
实例化一下
2. 开始录音recorder.startRecording();
3. 录音完成后停止录音recorder.stopRecording();
4. 当然如果录音开始之后想取消语音发送,类似于微信上滑取消语音发送,解决方案滑动监听判断确定取消发送,就不要将消息发出去并且还要调用recorder.cancelRecording(); //取消语音释放资源
即可
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android操作json格式数据技巧总结》、《Android资源操作技巧汇总》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。