首页 > 系统 > Android > 正文

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

2019-10-22 18:16:01
字体:
来源:转载
供稿:网友

本文实例讲述了Android编程录音工具类RecorderUtil定义与用法。分享给大家供大家参考,具体如下:

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

录音工具类介绍:

录音工具类主要平时用来开发语音聊天的,在微信和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开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表