简单录音器

public class AudioListView extends ListActivity {
	private Button play_btn;// 播放
	private Button record_btn;// 录音
	private Button pause_btn;// 暂停
	private Button del_btn;// 删除
	private Button back_btn;// 返回

	private TextView list_id_txt;

	private File mRecAudioFile;/* 录制的音频文件 */
	private File mRecAudioPath;
	String SDPATH = null;

	private MediaRecorder mMediaRecorder;/* MediaRecorder对象 */
	private List<String> mMusicList = new ArrayList<String>();/* 录音文件列表 */
	private String strTempFile = "";/* 零时文件的前缀 */
	private int filePosition = 0;// 文件ID

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		setTitle("我的录音器");
		setTitleColor(Color.YELLOW);
		/* 检测是否存在SD卡 */
		if (Environment.getExternalStorageState().equals(
				android.os.Environment.MEDIA_MOUNTED)) {
			SDPATH = Environment.getExternalStorageDirectory() + "/";
			if (isDirExist("Audio")) {
				System.out.println("Dir Audio is Exist!");
				String s = Environment.getExternalStorageDirectory() + "/Audio";
				File f = new File(s);
				System.out.println(f);
				mRecAudioPath = f;
			} else {
				File s = createSDDir("Audio");
				System.out.println(s);
				File f = new File(Environment.getExternalStorageDirectory()
						+ "/Audio");
				System.out.println(f);
				mRecAudioPath = f;
			}
			musicList();/* 更新所有录音文件到List中,这边的方法只被执行一次 */
		} else {
			Toast.makeText(AudioListView.this, "没有SD卡!", Toast.LENGTH_LONG)
					.show();
		}
		findView();
		setListener();
	}

	// 在SD卡上创建目录
	public File createSDDir(String dirName) {
		File dir = new File(SDPATH + dirName);
		dir.mkdir();
		return dir;
	}

	// 判断SD卡上的目录是否存在
	public boolean isDirExist(String fileName) {
		File file = new File(SDPATH + fileName);
		return file.exists();
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		clearList();
		musicList();/* 更新所有录音文件到List中 */
	}

	@Override
	protected void onPostResume() {
		// TODO Auto-generated method stub
		super.onPostResume();
		clearList();
		musicList();/* 更新所有录音文件到List中 */
	}

	/**
	 * 控件实例化
	 */
	private void findView() {
		// TODO Auto-generated method stub
		play_btn = find(play_btn, R.id.play_btn);
		record_btn = find(record_btn, R.id.record_btn);
		pause_btn = find(pause_btn, R.id.pause_btn);
		del_btn = find(del_btn, R.id.del_btn);
		back_btn = find(back_btn, R.id.back_btn);
		list_id_txt = (TextView) findViewById(R.id.list_id_txt);
	}

	/**
	 * Button实例化方法
	 */
	public Button find(Button button, int id) {
		button = (Button) findViewById(id);
		return button;
	}

	/**
	 * 注册监听事件
	 */
	private void setListener() {
		// TODO Auto-generated method stub
		play_btn.setOnClickListener(new PlayOnClickListener());
		record_btn.setOnClickListener(new RecordOnClickListener());
		pause_btn.setOnClickListener(new PauseOnClickListener());
		del_btn.setOnClickListener(new DelOnClickListener());
		back_btn.setOnClickListener(new BackOnClickListener());
	}

	/**
	 * 播放按钮的监听事件
	 */
	class PlayOnClickListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			// play_btn.setBackgroundResource(R.drawable.recordplaydisable);
			playMusic(getFile(filePosition));
		}

	}

	/**
	 * 录音按钮的监听事件
	 */
	class RecordOnClickListener implements OnClickListener {

		@Override
		public void onClick(View v) {

			pause_btn.setClickable(true);
			// TODO Auto-generated method stub
			try {

				strTempFile = new Universal().getTimeStr() + "_";// 获取时间
				mRecAudioFile = File.createTempFile(strTempFile, ".amr",
						mRecAudioPath);/* 创建录音文件 */

				mMediaRecorder = new MediaRecorder();/* 实例化MediaRecorder对象 */
				mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);/* 设置麦克风 */
				mMediaRecorder
						.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);/* 设置输出文件的格式 */
				mMediaRecorder
						.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);/* 设置音频文件的编码 */
				mMediaRecorder.setOutputFile(mRecAudioFile.getAbsolutePath());/* 设置输出文件的路径 */
				mMediaRecorder.prepare();/* 准备 */
				mMediaRecorder.start();/* 开始 */
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

	/**
	 * 停止按钮的监听事件
	 */
	class PauseOnClickListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			if (mRecAudioFile != null) {
				mMediaRecorder.stop();/* 停止录音 */
				mMusicList.add(mRecAudioFile.getName());/* 将录音文件添加到List中 */
				ArrayAdapter<String> musicList = new ArrayAdapter<String>(
						AudioListView.this, R.layout.listaudio, mMusicList);
				setListAdapter(musicList);
				mMediaRecorder.release();/* 释放MediaRecorder */
				mMediaRecorder = null;
			}
			pause_btn.setClickable(false);
		}
	}

	/**
	 * 删除按钮的监听事件
	 */
	class DelOnClickListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			String s = list_id_txt.getText().toString();
			if (s.equals("")) {
				// 请选择一条要删除的记录!,否则点击删除按钮无效
			} else {
				new AlertDialog.Builder(AudioListView.this).setMessage(
						"确定要删除吗?").setPositiveButton("是",
						new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog,
									int which) {
								File file = new File(mRecAudioPath
										.getAbsolutePath()
										+ File.separator
										+ mMusicList.get(filePosition));
								file.delete();
								clearList();// 先清空原数据
								musicList();// 重新读取数据
								list_id_txt.setText("");
								Toast.makeText(AudioListView.this, "删除成功!",
										Toast.LENGTH_LONG).show();
							}
						}).setNegativeButton("否",
						new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog,
									int which) {
								// finish();
							}
						}).show();
			}
		}
	}

	/**
	 * 返回按钮的监听事件
	 */
	class BackOnClickListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			/**
			 * 传递整个文件的路径
			 */
			String s = Environment.getExternalStorageDirectory() + "/Audio/"
					+ list_id_txt.getText().toString();
			System.out.println("录音文件路径:" + s);
			AudioListView.this.finish();
		}

	}

	/**
	 * 播放录音
	 */
	private void playMusic(File file) {
		Intent intent = new Intent();
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		intent.setAction(android.content.Intent.ACTION_VIEW);
		intent.setDataAndType(Uri.fromFile(file), "audio");/* 设置文件类型 */
		startActivity(intent);
	}

	/**
	 * 根据位置获取文件
	 * 
	 * @param position
	 */
	public File getFile(int position) {
		File playfile = new File(mRecAudioPath.getAbsolutePath()
				+ File.separator + mMusicList.get(position));
		return playfile;
	}

	/**
	 * 列表项监听事件
	 */
	protected void onListItemClick(ListView l, View v, int position, long id) {
		// /* 得到被点击的文件 */
		File playfile = new File(mRecAudioPath.getAbsolutePath()
				+ File.separator + mMusicList.get(position));
		list_id_txt.setText(playfile.getName());// 设置示当前文件名
		// playMusic(playfile);/* 播放 */
		filePosition = position;
	}

	/**
	 * 添加播放列表
	 */
	public void musicList() {
		// 取得指定位置的文件设置显示到播放列表
		File home = mRecAudioPath;
		if (home.listFiles(new MusicFilter()).length > 0) {
			for (File file : home.listFiles(new MusicFilter())) {
				mMusicList.add(file.getName());
			}
			ArrayAdapter<String> musicList = new ArrayAdapter<String>(
					AudioListView.this, R.layout.listaudio, mMusicList);
			setListAdapter(musicList);
		}
	}

	// 先清空ListView原来的数据
	public void clearList() {
		mMusicList.clear();
		ArrayAdapter<String> musicList = new ArrayAdapter<String>(
				AudioListView.this, R.layout.listaudio, mMusicList);
		setListAdapter(musicList);
	}

	/* 过滤文件类型 */
	class MusicFilter implements FilenameFilter {
		public boolean accept(File dir, String name) {
			return (name.endsWith(".amr"));
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值