一个完整的Android录音 功能模块代码
- 时间:2019-03-03
- 概述:录音模块
本代码介绍了如何创建一个完整的Android 录音功能模块,包括了录音监听事件、时间相关操作、设置音频编码器、麦克风调用、存储卡操作等:
package com.bn.ex10h; import java.io.File; import java.io.IOException; import android.app.Activity; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; public class Sample10_8_Activity extends Activity implements OnClickListener{ public static final int UPDATE_TIME=0;//更新录音时间的消息编号 ImageButton ibRecord;//录制按钮 ImageButton ibPause;//暂停按钮 ImageButton ibStop;//停止按钮 TextView tvTime;//时间长度显示 Handler hd;//消息处理器 File myFile ;//用于存放音轨的文件 MediaRecorder myMediaRecorder;//媒体录音机 int countSecond=0;//录制的秒数 boolean recordFlag=false;//录制中标志 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //初始化按钮引用 ibRecord=(ImageButton)this.findViewById(R.id.ImageButton01); ibStop=(ImageButton)this.findViewById(R.id.ImageButton02); //初始化显示录音时长的文本框 tvTime=(TextView)findViewById(R.id.TextView02); //为录制按钮添加监听器 ibRecord.setOnClickListener(this); //为停止按钮添加监听器 ibStop.setOnClickListener(this); //初始化消息处理器对象 //本案例中希望通过附加线程修改TextView中的内容,因此要在主 //线程中创建一个Handler hd=new Handler() { @Override public void handleMessage(Message msg) { //调用父类处理 super.handleMessage(msg); //根据消息what编号的不同,执行不同的业务逻辑 switch(msg.what) { //将消息中的内容提取出来显示在Toast中 case UPDATE_TIME: //获取消息中的数据 Bundle b=msg.getData(); //获取内容字符串 String msgStr=b.getString("msg"); //设置字符串到显示录音时长的文本框中 tvTime.setText(msgStr); break; } } }; } public void onClick(View v) { if(v == ibRecord){//按下录音按钮 if(!Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {//若没有插闪存卡则报错 Toast.makeText(this, "请检测内存卡", Toast.LENGTH_SHORT).show(); return; } try { if(recordFlag==true) {//若已经在录音中则提示并返回 Toast.makeText(this, "录音中,请结束本次录音再开始新录音!", Toast.LENGTH_SHORT).show(); return; } //初始化临时文件对象 myFile = File.createTempFile ( "myAudio", //基本文件名 ".amr", //后缀 Environment.getExternalStorageDirectory() //目录路径 ); //创建录音机对象 myMediaRecorder = new MediaRecorder(); //设置输入设备为麦克风 myMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置输出格式为默认的amr格式 myMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); //设置音频编码器为默认的编码器 myMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); //设置输出文件的路径 myMediaRecorder.setOutputFile(myFile.getAbsolutePath()); //准备录音 myMediaRecorder.prepare(); //开始录音 myMediaRecorder.start(); //设置录音中标记为true recordFlag=true; //启动一个线程进行计时 new Thread() { public void run() { while(recordFlag) { //计时器加一 countSecond++; //调用方法设置新时长 setTime(); //休息1000ms try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } catch (IOException e) { e.printStackTrace(); } } else if(v == ibStop){//按下停止按钮 if(myFile != null&&myMediaRecorder!=null) { //停止录音 myMediaRecorder.stop(); //释放录音机对象 myMediaRecorder.release(); //将录音机对象引用设置为null myMediaRecorder = null; } //设置录音中标记为false recordFlag=false; //计时器清0 countSecond=0; //调用方法设置新时长 setTime(); } } //设置显示时间的方法 public void setTime() { //计算分钟和秒 int second=countSecond%60; int minute=countSecond/60; //创建内容字符串 String msgStr=minute+"m:"+second+"s"; //创建消息数据Bundle Bundle b=new Bundle(); //将内容字符串放进数据Bundle中 b.putString("msg", msgStr); //创建消息对象 Message msg=new Message(); //设置数据Bundle到消息中 msg.setData(b); //设置消息的what值 msg.what=UPDATE_TIME; //发送消息 hd.sendMessage(msg); } }
本例子完整的源代码,可在这里下载:www.codesc.net/source/16507.shtml
相关声明:
- 若“一个完整的Android录音 功能模块代码”有损您的权益,请告之我们删除内容。
部分文章来源于网络,版权归原作者所有。