Android 简单的录音机

今天在做一个简单的录音机的时候,录音机老是无法正常实例化,不能使用,后来查找问题,一个一个的试,最后确定了,原来是两个设置写反了,却造成了,无法正常工作,真是郁闷啊。找了一个教程看了一下,教程中也没有提,这两个不能写反,就当给自己一个警告吧,也希望看到的人,不知道这个问题的人能记住。下面把代码放到下面:

package com.RecordTest;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Toast;

public class RecordTest extends ListActivity {

	Button btn1, btn2;

	int currertindex = 0;

	private MediaRecorder mediarecorder; // 创建录音机

	File recordFile = null;
	File sdcardPath = null;// 录音文件目录

	String Tempfile = "Record_temp_";
	List<String> fileList = new ArrayList<String>();

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		if (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
			sdcardPath = Environment.getExternalStorageDirectory();
			setTitle(sdcardPath.getName());
		} else {
			Toast.makeText(RecordTest.this, "没有SD卡", 1000).show();
		}
		getRecordList();

		btn1 = (Button) findViewById(R.id.btn1);

		btn2 = (Button) findViewById(R.id.btn2);

		btn1.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {
				// TODO Auto-generated method stub
				try {

					recordFile = File.createTempFile(Tempfile, ".amr",
							sdcardPath);
					Log.i("aaaaa", "1");
					mediarecorder = new MediaRecorder();
					Log.i("aaaaa", "2");
					mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置麦克风
					Log.i("aaaaa", "3");
					mediarecorder
							.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);	//设置输出文件格式
					Log.i("aaaaa", "4");
					mediarecorder
							.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); // 设置编码格式

					
					Log.i("aaaaa", "5");
					mediarecorder.setOutputFile(recordFile.getAbsolutePath()); // 使用绝对路径进行保存文件
					Log.i("aaaaa", "6");
					 mediarecorder.prepare();
					mediarecorder.start();
					Toast.makeText(RecordTest.this, "开始", Toast.LENGTH_LONG).show();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		});

		btn2.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {
				// TODO Auto-generated method stub
				try {
					
					if (recordFile != null) {
						mediarecorder.stop();
						fileList.add(recordFile.getName());
						
						 ArrayAdapter<String> list = new
						 ArrayAdapter<String>(RecordTest.this,
						 R.layout.itemlist, R.id.listitem, fileList);

						 setListAdapter(list);
						 mediarecorder = null;
						 Toast.makeText(RecordTest.this, "停止", Toast.LENGTH_LONG).show();
					}
				} catch (Exception e) {
					Log.i("eeeee", e.getMessage());
				}
			}
		});
	}

	void getRecordList() {
		// 首先检测是否存在SDCard
		try {
			File home = sdcardPath;
			fileList.clear();
			if (home.list(new Fileter()).length > 0) {
				for (File file : home.listFiles(new Fileter())) {
					fileList.add(file.getName());
				}

				ArrayAdapter<String> list = new ArrayAdapter<String>(this,
						R.layout.itemlist, R.id.listitem, fileList);

				setListAdapter(list);

			}
		} catch (Exception e) {
			Toast.makeText(RecordTest.this, e.getMessage(), 1000).show();
		}

	}

	class Fileter implements FilenameFilter {

		public boolean accept(File dir, String filename) {
			// TODO Auto-generated method stub
			return filename.equals(".amr");
		}

	}
}

在使用过程中,需要加入操作SD卡和使用录音设备的权限,即在AndroidManifest.xml中加入: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
然后就可以使用了,如果有问题,欢迎大家指正!

原文地址:https://www.cnblogs.com/fly_binbin/p/1903930.html