一个有关录音的小demo

比较简单,直接上代码了

package com.example.myrcodeandplay;

import java.io.File;
import java.util.ArrayList;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.media.MediaRecorder;
import android.media.MediaRecorder.AudioEncoder;
import android.media.MediaRecorder.AudioSource;
import android.media.MediaRecorder.OutputFormat;
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.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
	/** 录音按钮 */
	private ImageButton rcodeButton;
	/** 停止按钮 */
	private ImageButton stopButton;
	/** 播放按钮 */
	private ImageButton playButton;
	/** 删除按钮 */
	private ImageButton deleteButton;
	/** 显示已经存放好的文件 */
	private ListView recodeLileList;
	/** 录音名字前缀名 */
	private String strTempFile = "my_recode_file";
	/** 正在录音的文件 */
	private File myRecAudioFile;
	/** 录音文件存放目录 */
	private File myRecAudioDir;
	/** 正在播放的文件 */
	private File myPlayFile;
	/** 录音文件类 */
	private MediaRecorder mediaRecorder;
	/** 存放录音文件名的列表 */
	private ArrayList<String> recordFiles;
	private ArrayAdapter<String> adapter;
	/** 显示程序运行状态的textview */
	private TextView flagTextView;
	/** sd卡是否存在 */
	private boolean sdCardExit;
	/** 是否停止录音 */
	private boolean isStopRecord;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
		setSdCardExit();
		getRecordFile();
		setAdapter();
		setListener();
	}

	/** 设置各种监听器 */
	private void setListener() {
		rcodeButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				try {
					if (!sdCardExit) {
						Toast.makeText(MainActivity.this, "请插入SD卡",
								Toast.LENGTH_LONG).show();
					}
					// 设置缓存文件路劲
					myRecAudioFile = File.createTempFile(strTempFile, ".amr",
							myRecAudioDir);
					// 建立录音类
					mediaRecorder = new MediaRecorder();
					// 使用话筒
					mediaRecorder.setAudioSource(AudioSource.MIC);
					// 设置默认输出方式
					mediaRecorder.setOutputFormat(OutputFormat.DEFAULT);
					mediaRecorder.setAudioEncoder(AudioEncoder.DEFAULT);
					// 设置输出文件路径
					mediaRecorder.setOutputFile(myRecAudioFile
							.getAbsolutePath());
					// 初始化
					mediaRecorder.prepare();
					// 开始录音
					mediaRecorder.start();
					flagTextView.setText("录音中");
					stopButton.setEnabled(true);
					playButton.setEnabled(false);
					deleteButton.setEnabled(false);
					isStopRecord = false;
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		stopButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				try {
					if (myRecAudioFile != null) {
						// 停止
						mediaRecorder.stop();
						// 清流
						mediaRecorder.release();
						// 置空
						mediaRecorder = null;
						adapter.add(myRecAudioFile.getName());
						flagTextView.setText("停止:" + myRecAudioFile.getName());
						stopButton.setEnabled(false);
						isStopRecord = true;
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		playButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				if (myRecAudioFile != null && myPlayFile.exists()) {
					openFile(myPlayFile);
				}
			}
		});
		deleteButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				if (myPlayFile != null) {
					adapter.remove(myPlayFile.getName());
					if (myPlayFile.exists()) {
						myPlayFile.delete();
					}
					flagTextView.setText("完成删除");
				}
			}
		});
		recodeLileList.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				playButton.setEnabled(true);
				deleteButton.setEnabled(true);
				myPlayFile = new File(myRecAudioDir.getAbsolutePath()
						+ File.separator + ((CheckedTextView) view).getText());
				flagTextView.setText("你选的是:"
						+ ((CheckedTextView) view).getText());
			}
		});
	}

	/** 给listView关联适配器 */
	private void setAdapter() {
		adapter = new ArrayAdapter<>(this, R.layout.my_simple_list_item,
				recordFiles);
		recodeLileList.setAdapter(adapter);
	}

	/** 给sdCardExit赋值 */
	private void setSdCardExit() {
		sdCardExit = Environment.getExternalStorageState().equals(
				android.os.Environment.MEDIA_MOUNTED);
		if (sdCardExit) {
			myRecAudioDir = Environment.getExternalStorageDirectory();
		}
	}

	/** 初始化控件 */
	private void init() {
		rcodeButton = (ImageButton) findViewById(R.id.ImageButton01);
		stopButton = (ImageButton) findViewById(R.id.ImageButton02);
		playButton = (ImageButton) findViewById(R.id.ImageButton03);
		deleteButton = (ImageButton) findViewById(R.id.ImageButton04);
		recodeLileList = (ListView) findViewById(R.id.ListView01);
		flagTextView = (TextView) findViewById(R.id.TextView01);
		stopButton.setEnabled(false);
		playButton.setEnabled(false);
		deleteButton.setEnabled(false);
	}

	@Override
	protected void onStop() {
		if (mediaRecorder != null && !isStopRecord) {
			mediaRecorder.stop();
			mediaRecorder.release();
			mediaRecorder = null;
		}
		super.onStop();
	}

	/** 调用系统默认软件播放音频文件 */
	protected void openFile(File f) {
		Intent intent = new Intent();
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		intent.setAction(android.content.Intent.ACTION_VIEW);
		String type = getMIMEType(f);
		intent.setDataAndType(Uri.fromFile(f), type);
		startActivity(intent);
	}

	/** 根据不同后缀名,设置不同type值,使打开不同的三方应用 */
	@SuppressLint("DefaultLocale")
	private String getMIMEType(File f) {
		String end = f
				.getName()
				.substring(f.getName().lastIndexOf(".") + 1,
						f.getName().length()).toLowerCase();
		String type = "";
		if (end.equals("aac") || end.equals("mp3") || end.equals("amr")
				|| end.equals("mpeg") || end.equals("mp4")) {
			type = "audio";
		} else if (end.equals("jpg") || end.equals("gif") || end.equals("png")
				|| end.equals("jpeg")) {
			type = "image";
		} else {
			type = "*";
		}
		type += "/*";
		return type;
	}

	/** 获取sd卡根目录中的所有arm文件 */
	private void getRecordFile() {
		recordFiles = new ArrayList<>();
		if (sdCardExit) {
			File[] files = myRecAudioDir.listFiles();
			if (files != null) {
				for (int i = 0; i < files.length; i++) {
					if (files[i].getName().indexOf(".") >= 0) {
						String fileS = files[i].getName().substring(
								files[i].getName().indexOf("."));
						if (fileS.equals(".amr")) {
							recordFiles.add(files[i].getName());
						}
					}
				}
			}
		}
	}
}

需要添加如下权限:

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

界面样式如下:

一个有关录音的小demo_第1张图片

你可能感兴趣的:(android,MediaRecorder,录音)