5.6. 媒体录制
5.6.1 MediaRecorder简介
使用MediaRecorder进行音频和视频的录制。
继承结构:
public class MediaRecorderextends Object
|
MediaRecorder的生命周期:
5.6.2 音频录制
配置:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageButton android:id="@+id/record" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/record" /> <ImageButton android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/stop" /> </LinearLayout> <TextView android:id="@+id/info" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="文字提示信息..." /> <ListView android:id="@+id/reclist" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
|
Activity:
package com.makyan.demo; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.Intent; import android.media.MediaRecorder; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ImageButton; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView;
public class MediaRecorderActivity extends Activity { private ImageButton record = null; // 按钮信息 private ImageButton stop = null; // 按钮信息 private TextView info = null; // 提示信息 private MediaRecorder mediaRecorder = null; // MediaRecorder对象 private File recordAudioSaveFile = null; // 文件保存目录路径 private File recordAudioSaveFileDir = null; // 文件保存目录 private String recordAudioSaveFileName = null; // 音频文件保存名称 private SimpleAdapter recordSimpleAdapter = null; // 适配器 private ListView reclist = null; // 定义列表视图 private String recDir = "makyanrec"; // 保存目录 private boolean sdcardExists = false; // 判断SD卡是否存在 private boolean isRecord = false; // 判断是否正在录音 private List<Map<String, Object>> recordFiles = null; // 保存所有的List数据
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.activity_media_recorder); // 调用布局管理器 this.record = (ImageButton) super.findViewById(R.id.record); // 查找组件 this.stop = (ImageButton) super.findViewById(R.id.stop); // 查找组件 this.info = (TextView) super.findViewById(R.id.info); // 查找组件 this.reclist = (ListView) super.findViewById(R.id.reclist); // 查找组件
// 判断SD卡是否存在 if (this.sdcardExists = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { this.recordAudioSaveFileDir = new File(Environment .getExternalStorageDirectory().toString() + File.separator + MediaRecorderActivity.this.recDir + File.separator); // 保存录音目录 if (!this.recordAudioSaveFileDir.exists()) { // 父文件夹不存在 this.recordAudioSaveFileDir.mkdirs(); // 创建新的文件夹 } }
// 取得全部的文件列表 this.getRecordFiles(); // 设置单击事件 this.stop.setOnClickListener(new StopOnClickListenerImpl()); // 设置单击事件 this.record.setOnClickListener(new RecordOnClickListenerImpl()); // 暂停钮暂时不可用 this.stop.setEnabled(false); // 设置单击事件 this.reclist.setOnItemClickListener(new OnItemClickListenerImpl()); } private class RecordOnClickListenerImpl implements OnClickListener { @Override public void onClick(View v) { // 如果SD卡存在 if (MediaRecorderActivity.this.sdcardExists) { // 文件保存名称 MediaRecorderActivity.this.recordAudioSaveFileName = MediaRecorderActivity.this.recordAudioSaveFileDir .toString() + File.separator + "MAKYANRecord_" + System.currentTimeMillis() + ".3gp"; // 取得音频文件保存路径 MediaRecorderActivity.this.recordAudioSaveFile = new File(MediaRecorderActivity.this.recordAudioSaveFileName); // 实例化MediaRecorder MediaRecorderActivity.this.mediaRecorder = new MediaRecorder(); // 设置录音源为MIC(麦克风) MediaRecorderActivity.this.mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 定义输出格式 MediaRecorderActivity.this.mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); // 定义音频编码 MediaRecorderActivity.this.mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); // 定义输出文件 MediaRecorderActivity.this.mediaRecorder.setOutputFile(MediaRecorderActivity.this.recordAudioSaveFileName); try { // 准备录音 MediaRecorderActivity.this.mediaRecorder.prepare(); } catch (Exception e) { e.printStackTrace(); } // 开始录音 MediaRecorderActivity.this.mediaRecorder.start(); // 提示信息 MediaRecorderActivity.this.info.setText("正在录音中..."); // 停止按钮可用 MediaRecorderActivity.this.stop.setEnabled(true); // 录音按钮禁用 MediaRecorderActivity.this.record.setEnabled(false); // 正在录音 MediaRecorderActivity.this.isRecord = true; } } } private class StopOnClickListenerImpl implements OnClickListener { @Override public void onClick(View v) { // 已经开始录音,则停止 if (MediaRecorder |