前言
MediaRecorder可以实现录音和录像,使用MediaRecorder录音录像时需要严格遵守API说明中的函数调用先后顺序,否则不能成功执行。
地址
CSDN 地址:http://blog.csdn.net/xiangyong_1521/article/details/50681230官方说明:http://developer.android.com/reference/android/media/MediaRecorder.html
MediaRecorder类的常用方法
MediaRecorder() 构造方法
getMaxAmplitude() 得到目前为止最大的幅度
prepare() 准备录音机
release() 释放MediaRecorder对象
reset() 重置MediaRecorder对象,使其为空闲状态
setAudioEncoder() 设置音频编码
setAudioSource() 设置音频源
setCamera() 设置摄像机
setMaxDuration() 设置最大期限
setMaxFileSize() 设置文件的最大尺寸
setOnErrorListener() 错误监听
setOutputFile() 设置输出文件
setOutputFormat() 设置输出文件的格式
setPreviewDisplay() 设置预览
setVideoEncoder() 设置视频编码
setVideoFrameRate() 设置视频帧的频率
setVideoSize() 设置视频的宽度和高度(分辨率)
setVideoSource() 设置视频源
start() 开始录制
stop() 停止录制
效果
20171016拓展录制时间:
主要代码
Mainactivity:
package com.example.book_mediarecorder;import java.io.File;import java.sql.Date;import java.text.SimpleDateFormat;import android.app.Activity;import android.media.MediaRecorder;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity { Boolean isRecording=false; TextView rTimer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Button button = (Button) findViewById(R.id.bRecourd); rTimer = (TextView) findViewById(R.id.rTimer); if (isRecording) { button.setText("正在录制中..."); }else{ button.setText("开始录制"); } button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (!isRecording) { isRecording=true; button.setText("正在录制中..."); startRecord(); }else{ isRecording=false; button.setText("开始录制"); stopRecord(); } } }); } private MediaRecorder mr=null; int Count; //开始录制 private void startRecord() { if (mr == null) { File dir = new File(Environment.getExternalStorageDirectory(), "sounds"); //创建音频存放的目录 if (!dir.exists()) { dir.mkdirs(); } File soundFile = new File(dir, getCurrentTime()+".amr"); //创建的音频名称 if (!soundFile.exists()) { try { soundFile.createNewFile(); } catch (Exception e) { e.printStackTrace(); } } mr = new MediaRecorder(); mr.setAudioSource(MediaRecorder.AudioSource.MIC);//拿到机器的MIC mr.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB);//设置输出格式 mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);//设置编码格式 mr.setOutputFile(soundFile.getAbsolutePath()); try { mr.prepare(); mr.start(); } catch (Exception e) { e.printStackTrace(); } Count = 0; handler = new Handler(); runnable = new Runnable() { @Override public void run() { if (Count == 1800) {//限制录制时间1800s mr.stop(); mr.release(); mr = null; } Count ++; str = showTimeCount((long)Count)+"/30:00"; rTimer.setText(str); if (handler!=null) { handler.postDelayed(this, 1000); } } }; runnable.run(); } } Handler handler; Runnable runnable ; String str; //停止录制 private void stopRecord() { if (mr != null) { mr.stop(); mr.release(); mr = null; } str=""; handler=null; runnable=null; } //获取当前时间,以其为名来保存录音 private String getCurrentTime(){ SimpleDateFormat format=new SimpleDateFormat("yyyyMMddHHmmss"); Date date=new Date(System.currentTimeMillis()); String str=format.format(date); return str; } 将时间转为计时格式 String showTimeCount(long time){ String s = null; if (time <= 59) { s = "00:"; return time<10 ? s+"0"+String.valueOf(time) : s+String.valueOf(time); }else{ return (time%60 <10 ? s+"0"+String.valueOf(time) : s+String.valueOf(time))+ ":"+(time/60<10 ? s+"0"+String.valueOf(time) : s+String.valueOf(time)); } }}
布局一个Button,一个textView:
权限如下:
附
>
>
>
>
>
END