`

MediaRecorder一般录制视频,只能是amr格式的

 
阅读更多
public class AudioListView extends ListActivity implements OnClickListener {
	private Button play_btn;// 播放
	private Button record_btn;// 录音
	private Button pause_btn;// 暂停
	private Button del_btn;// 删除

	private TextView list_id_txt;

	private File fileName;/* 录制的音频文件 */
	private File filePath;
	String SDPATH = null;
	private static final String AUDIO_DIR = Environment
			.getExternalStorageDirectory().getAbsolutePath()
			+ File.separator + "mobileoa" + File.separator + "audio";// 录音目录

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

	/* 顶部菜单 */
	Button tBack_btn;// 返回按钮
	Button tMenu_btn;// 菜单按钮
	TextView title_txt;// 标题
	RelativeLayout audioLayout;
	RelativeLayout mainFrame;
	GlobalVariable gv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		gv = (GlobalVariable) getApplication();
		gv.getActivityList().add(this);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);// 去掉信息栏注意,这个设置必须放在设置布局前面,不然会报错
		/* 渲染主窗体 */
		LayoutInflater inflater = LayoutInflater.from(AudioListView.this);
		mainFrame = (RelativeLayout) inflater.inflate(
				R.layout.audiolistview, null);
		RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
				LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

		addContentView(mainFrame, params);
		mainFrame.setBackgroundResource(gv.getBackground());
		/* 主窗体中添加公共的顶部菜单 */
		RelativeLayout topmenu = (RelativeLayout) inflater.inflate(
				R.layout.topmenu, null);

		mainFrame.addView(topmenu, params);
		this.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
				R.layout.title);


		/*----------------顶部菜单的处理----------------------------- */
		// 获得标题对象
		title_txt = (TextView) findViewById(R.id.title_text);
		// 设置标题的内容
		title_txt.setText("录音");

		tBack_btn = (Button) findViewById(R.id.topback_btn);// 获得返回按钮对象
		tBack_btn.setOnClickListener(new OnClickListener() {// 注册返回按钮事件

					@Override
					public void onClick(View v) {
						AudioListView.this.finish();

					}
				});
		tMenu_btn = (Button) findViewById(R.id.topemenu_btn);// 获得菜单按钮对象
		tMenu_btn.setVisibility(View.INVISIBLE);
		checkState();
		musicList();/* 更新所有录音文件到List中,这边的方法只被执行一次 */
		findView();
		setListener();
	}

	// 检查是否有内存卡
	private void checkState() {
		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			File file = new File(AUDIO_DIR);
			if (!file.isDirectory()) {
				file.mkdirs();
			}
			filePath = file;
		} else {
			Toast.makeText(AudioListView.this, "SD卡不存在!无法保存相片", 3000).show();
		}
	}

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

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

	/**
	 * 控件实例化
	 */
	private void findView() {
		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);
		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() {
		play_btn.setOnClickListener(this);
		record_btn.setOnClickListener(this);
		pause_btn.setOnClickListener(this);
		del_btn.setOnClickListener(this);
		// back_btn.setOnClickListener(new BackOnClickListener());
	}

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

		@Override
		public void onClick(View v) {
			Service.TurnMainView(AudioListView.this, MainView.class, MainView2.class, getString(R.string.dbname));
			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(filePath.getAbsolutePath() + File.separator
				+ mMusicList.get(position));
		return playfile;
	}

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

	/**
	 * 添加播放列表
	 */
	public void musicList() {
		// 取得指定位置的文件设置显示到播放列表
		File home = filePath;
		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"));
		}
	}

	@Override
	public void onClick(View v) {
		int id = v.getId();
		String s = list_id_txt.getText().toString();
		switch (id) {
		case R.id.record_btn:// 录音
			pause_btn.setEnabled(true);
			record_btn.setEnabled(false);
			Toast.makeText(AudioListView.this, "开始录音...", 1000).show();
			record_btn.setText("录音中...");
			try {

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

				mMediaRecorder = new MediaRecorder();/* 实例化MediaRecorder对象 */
				mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);/* 设置麦克风 */
				mMediaRecorder
						.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);/* 设置输出文件的格式 */
				mMediaRecorder
						.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);/* 设置音频文件的编码 */
				mMediaRecorder.setOutputFile(fileName.getAbsolutePath());/* 设置输出文件的路径 */
				mMediaRecorder.prepare();/* 准备 */
				mMediaRecorder.start();/* 开始 */
			} catch (IOException e) {
				e.printStackTrace();
			}
			break;
		case R.id.play_btn:// 播放
			if (s.equals("")) {
				Toast.makeText(AudioListView.this, "请选择一条要播放的录音!", 1000).show();
			} else {
				playMusic(getFile(filePosition));
			}

			break;
		case R.id.pause_btn:// 停止
			record_btn.setText("录音");
			if (fileName != null) {
				mMediaRecorder.stop();/* 停止录音 */
				mMusicList.add(fileName.getName());/* 将录音文件添加到List中 */
				ArrayAdapter<String> musicList = new ArrayAdapter<String>(
						AudioListView.this, R.layout.listaudio, mMusicList);
				setListAdapter(musicList);
				mMediaRecorder.release();/* 释放MediaRecorder */
				mMediaRecorder = null;
			}
			pause_btn.setEnabled(false);
			record_btn.setEnabled(true);
			new AlertDialog.Builder(AudioListView.this)
			.setTitle("提示")
			.setMessage("录音完成,是否添加到邮件附件?")
			.setPositiveButton("添加", new DialogInterface.OnClickListener(){
				@Override
				public void onClick(DialogInterface dialog, int which) {
					FileChooser.fileName = fileName.getName();
					FileChooser.filePath = fileName.getAbsolutePath();
					finish();
				}
			})
			.setNegativeButton("取消", null).create().show();
			break;
		case R.id.del_btn:// 删除
			if (s.equals("")) {
				Toast.makeText(AudioListView.this, "请选择一条要删除的记录!", 1000).show();
			} else {
				new AlertDialog.Builder(AudioListView.this).setMessage(
						"确定要删除吗?").setPositiveButton("是",
						new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog,
									int which) {
								File file = new File(filePath.getAbsolutePath()
										+ File.separator
										+ mMusicList.get(filePosition));
								file.delete();
								clearList();// 先清空原数据
								musicList();// 重新读取数据
								list_id_txt.setText("");
							}
						}).setNegativeButton("否",
						new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog,
									int which) {
								// finish();
							}
						}).show();
			}
			break;

		default:
			break;
		}
	}


}

 

分享到:
评论

相关推荐

    Android MediaRecorder 视频录制 Demo

    1初始化MediaRecorder对象并设置必要的参数,比如音频源、视频源、输出文件格式等。 2.配置音频和视频的编码器,例如使用AMR NB或AMR WB作为音频编码器,使用MPEG4或H.264作为视频编码器。 3.设置录制视频的尺寸和...

    MediaRecorder语音录制播放

    `MediaRecorder` 是Android SDK中的一个核心组件,它允许开发者录制音频、视频或者捕获图像,然后保存到本地文件。在进行语音录制时,`MediaRecorder` 提供了设置音频源、编码格式、输出文件路径等关键参数的功能。 ...

    Android MediaRecorder Demo1

    在Android开发中,`MediaRecorder` 是一个非常重要的类,用于录制音频、视频或混合媒体。这个`Android MediaRecorder Demo1` 是一个基础的录音应用示例,旨在帮助初学者了解如何使用`MediaRecorder` API。如果你是...

    Android多媒体功能开发-使用MediaRecorder类录制音频

    MediaRecorder类是Android SDK提供的一种强大工具,用于处理多媒体数据的录制,包括音频和视频。本文将深入探讨如何使用MediaRecorder类来录制音频。 **MediaRecorder概述** MediaRecorder是一个Android系统类,它...

    Android使用MediaRecorder类进行录制视频

    在Android平台上,录制视频通常涉及使用`MediaRecorder`类,这是一个强大的工具,允许开发者实现音频和视频的捕获。在本篇文章中,我们将深入探讨如何使用`MediaRecorder`类进行视频录制,以及在这个过程中需要注意...

    录制amr,wav格式文件,然后播放

    根据需要选择录音格式,设置`setOutputFormat()`为`MediaRecorder.OutputFormat.AMR_NB`(AMR窄带)或`MediaRecorder.OutputFormat.WAVE_FORMAT_PCM_16BIT`(WAV格式)。同时,指定录音文件路径和文件名。 2. **...

    Android利用MediaRecorder录音

    在Android平台上,MediaRecorder是一个非常重要的类,它用于处理多媒体数据的录制,包括音频、视频以及图像。在本文中,我们将深入探讨如何利用MediaRecorder来实现Android应用中的录音功能。 首先,我们需要理解...

    MediaVideoRecord:这是一个关于如何使用android MediaRecorder录制视频的演示

    在Android平台上,MediaRecorder是一个非常重要的工具类,用于处理多媒体数据的录制,包括音频和视频。...通过这个项目,你不仅可以学习到如何录制视频,还能了解到Android多媒体处理的一些基础概念和最佳实践。

    Android录制音频转mp3格式

    综上所述,Android录制音频转MP3格式的过程包括使用MediaRecorder进行音频录制,通过FFmpeg进行格式转换,以及妥善管理文件存储。理解并熟练掌握这些技术,能帮助开发者实现高质量的音频处理功能。

    Android中通过MediaRecorder录音录像

    在Android平台上,MediaRecorder类是用于音频、视频录制的核心组件。它可以帮助开发者实现从麦克风捕获音频,从相机捕获视频,或者同时进行音频和视频的录制。本篇文章将深入探讨如何使用MediaRecorder在Android应用...

    Android应用源码之MediaRecorder-IT计算机-毕业设计.zip

    在Android应用开发中,MediaRecorder是一个非常重要的组件,它允许开发者录制音频、视频,并将其输出为多媒体文件。这个源码示例"Android应用源码之MediaRecorder"是针对Android平台上媒体录制功能的一个实践项目,...

    Android应用源码之MediaRecorder.zip

    1. **音频录制**:`MediaRecorder`支持多种音频编码格式,如AAC、AMR_NB、AMR_WB等。开发者可以通过`setAudioSource()`和`setAudioEncoder()`方法来配置音频输入源和编码器。 2. **视频录制**:同样,`...

    Android采用MediaRecorder进行录音和播放的源码

    在Android平台上,MediaRecorder是一个非常重要的类,它用于处理多媒体数据的录制,涵盖了音频、视频以及图像等。本文将深入探讨如何使用MediaRecorder进行录音和播放操作,通过源码解析来帮助开发者理解其实现原理...

    MediaRecorder 录音,仿微信录音界面效果

    MediaRecorder是Android系统提供的一个类,用于录制音频、视频或者捕获摄像头数据。在录音功能中,我们主要关注其音频录制功能。首先,需要初始化MediaRecorder对象,设置其音频源、输出格式、音频编码以及输出文件...

    Android录音--AudioRecord、MediaRecorder

    至于常用的mp3格式,使用MediaRecorder没有该视频格式输出。一些人的做法是使用AudioRecord录音,然后编码成wav格式,再转换成mp3格式 再贴上一些测试工程。 功能描述: 1、点击“录音WAV文件”,开始录音。...

    Android 音视频录制程序

    在使用MediaRecorder录制音视频时,需要进行一系列配置,如设定输出文件路径、视频分辨率、帧率、视频编码格式(如H.263)以及音频编码格式(如AMR_NB)。还需要确保相机和麦克风权限已获取,并正确设置预览显示。 ...

    Android VideoCamera MediaRecorder 解析PPT

    在Android平台上,MediaRecorder是用于录制音频和视频的关键类。它是Android多媒体框架的一部分,提供了从摄像头和麦克风捕获媒体数据并将其编码到文件的功能。本文将深入解析MediaRecorder的生命周期、使用方法以及...

    安卓Android源码——MediaRecorder.rar

    在Android系统中,`MediaRecorder` 是一个非常重要的类,用于录制音频、视频以及合成多媒体流。这个类提供了丰富的功能,让开发者能够轻松地构建多媒体录制应用。在本压缩包中,我们很可能是得到了`MediaRecorder`类...

    基于android视频通话及录音实现

    - 音频采集:MediaRecorder类可用于录制音频,它支持多种编码格式,如AAC、AMR等。在视频通话中,通常会使用麦克风捕捉声音。 2. **网络通信**: - 实现视频通话通常需要使用实时通信(RTC)协议,如WebRTC。...

Global site tag (gtag.js) - Google Analytics