Android开发使用MediaRecorder进行录音

编程入门 行业动态 更新时间:2024-10-26 18:24:05

<a href=https://www.elefans.com/category/jswz/34/1771384.html style=Android开发使用MediaRecorder进行录音"/>

Android开发使用MediaRecorder进行录音

在说手机android开发如何使用MediaRecorder进行录音前,我先来说一下如何在手机SD卡或手机内存上定义路径吧(优先存储在SD卡上)。

// 获取存放图片或录音文件的路径(手机内存上或内存卡上)private String getPath() {String sdStatus = Environment.getExternalStorageState();String path;if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用path = WriteDiary.this.getFilesDir().toString() + "/Test/";} else {path = Environment.getExternalStorageDirectory().toString() + "/Test/";}File file = new File(path);if (!file.exists()) {file.mkdirs(); // 创建文件夹}return path;}

我们可以先使用该方法获取我们将要存储录音文件的位置。

这里我自己写了一个录音类(其中还包含播放录音文件的方法,需要时可以进行调用)

import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Locale;import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.Uri;
import android.text.format.DateFormat;//作为工具类存在:手机应用使用手机录音时调用
public class RecordSound {private String pn;// 路径加名称// 系统的音频文件private File soundFile;private MediaRecorder mRecorder;private MediaPlayer mPlayer;// 用于播放录音文件private Context context;// 调用该方法将可进行录音操作// 输入手机中存放录音的位置即可进行调用,音频文件将以时间作为名字进行保存public void startRecord(String path) {try {pn = path+ DateFormat.format("yyyyMMdd_hhmmss",Calendar.getInstance(Locale.CHINA)) + ".amr";// 创建保存录音的音频文件soundFile = new File(pn);mRecorder = new MediaRecorder();// 设置录音的声音来源mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置录制的声音的输出格式(必须在设置声音编码格式之前设置)mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 设置声音编码的格式mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);mRecorder.setOutputFile(soundFile.getAbsolutePath());mRecorder.prepare();mRecorder.start(); // 开始录音} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// 停止录音,释放资源public void stopRecord(Context cn) {if (soundFile != null && soundFile.exists()) {context = cn;// 停止录音mRecorder.stop();// 释放资源mRecorder.release();mRecorder = null;mPlayer = MediaPlayer.create(context,Uri.fromFile(new File(pn)));}}// 播放录音文件public void playRecordSource() {// 播放mPlayer.start();}// 停止播放录音文件public void pauseRecordSource() {if (mPlayer.isPlaying()) {mPlayer.pause();mPlayer.seekTo(0);}}//这里存在:BUG/** java.lang.RuntimeException: Unable to destroy activity * {com.diary.view/com.diary.view.extra.WriteDiary}:*  java.lang.IllegalStateException*  情况:为了在活动停止后,也使得正在播放的录音文件停止,需要调用stop方法,否则录音文件将持续播放,为了解决该问题,增加stop和release方法。*  原因:可是在活动停止前,如果录音文件并没有在播放的话(或者说处于其他状态的话)就可能出现问题 了。*  	在这里将直接调用release方法,又可以达到目的,又可以解决问题了。*  解决:进行如下注释。*/public void stopRecordSource() {if(mPlayer != null) {/*if(mPlayer.isPlaying())mPlayer.stop();*/mPlayer.release();			}}public String getPathName() {return pn;}
}

出现上述代码中所说的BUG(已解决+原因在代码中):

这里介绍一下RecordSound的使用说明:

我们可以假定:现在Android布局文件中有一个Button,而这个Button中注册了监听器,监听器外可以创建一个 RecordSound对象,当Button被点击时,RecordSound对象可以调用startRecord方法开始进行录音,该方法要传入路径,使用我刚写的获取路径的方法即可。为了体现录音效果我们可以在布局文件中增加一个计时器(这里还定义了stop按钮):

<RelativeLayoutandroid:layout_width="200dp"android:layout_height="wrap_content"android:layout_centerInParent="true"android:background="@android:color/white" ><Chronometerandroid:id="@+id/chronometer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:format="%s"android:textColor="#00BB9C"android:textSize="50px" /><Buttonandroid:id="@+id/stop_record_bt"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/chronometer"android:layout_centerHorizontal="true"android:background="@null"android:text="@string/stop_record"android:textColor="@drawable/cancel_button_selector" /></RelativeLayout>
当录音结束后可以点击stop_record_bt按钮,停止录音。当然该按钮注册了相应的监听器,调用了RecordSound对象的相应停止录音的方法。

播放录音文件也可以同开始录音停止录音那样使用。


更多推荐

Android开发使用MediaRecorder进行录音

本文发布于:2024-02-26 07:02:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1701678.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Android   MediaRecorder

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!