您的位置:首页 > 移动开发 > Android开发

Android编程录音工具类RecorderUtil定义与用法示例

2018-01-29 14:25 1031 查看

以下工具类都是经过实战开发验证都是可以直接复制使用的。

录音工具类介绍:

录音工具类主要平时用来开发语音聊天的,在微信和QQ上该工具类都是常用的,因为语音聊天。

使用硬件一般都要开权限,别忘了。这里还需要搭配 Android FileUtil 类使用,为了方便才这么封装的

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程序设计有所帮助。

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 录音 工具类