[size=small][color=olive][b]调用系统自带的程序进行音频的录制:[/b][/color][/size]
[size=small][color=brown][b]使用MediaRecoreder实现音频录制:[/b][/color][/size]
package com.example.media_record;
package com.example.media_record;
import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/* 使用自带的音频录制程序
* 利用MediaRecorder 类实现自己的音频录制程序,也可以录制视频;
* 创建实例后,调用:
* 1、setAudioSource 初始化
* 2、setOuputFormat 音频格式
* 3、setAudioEncoder 初始化;
* 4、setOutputFile() 指定存放录制内容的文件;
*
* */
public class MainActivity extends Activity {
private Button system_record,custom_media,custom_audio;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* 获取组件对象,并且设置事件监听 */
system_record = (Button) findViewById(R.id.system_mediaRecord);
custom_media = (Button) findViewById(R.id.custom_mediaRecord);
custom_audio = (Button) findViewById(R.id.custom_audioRecord);
/* 设置事件监听 */
system_record.setOnClickListener(listener);
custom_audio.setOnClickListener(listener);
custom_media.setOnClickListener(listener);
}
/* 覆盖该方法,接收数据 *//* 这里获取录制到的音频的Uri, 可以进行播放等操作 */
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RESULT_OK){
Uri audioPath = data.getData();
MediaPlayer mediaPlayer = MediaPlayer.create(this, audioPath);
mediaPlayer.start();
Toast.makeText(MainActivity.this, audioPath.toString(), 1000).show();
}
}
/* 设置按钮事件监听器 */
OnClickListener listener = new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.system_mediaRecord:
/* 调用Android自带的音频录制程序 */
Intent intent1= new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
startActivityForResult(intent1, 0);
break;
case R.id.custom_mediaRecord:
/* 通过MediaRecorder 类实现自己的音频录制程序 */
Intent intent2 = new Intent();
intent2.setClass(MainActivity.this,MyMediarRecorder.class);
startActivityForResult(intent2, 1);
break;
case R.id.custom_audioRecord:
/* 通过AudioRecord类实现自己的音频录制程序 */
Intent intent3 = new Intent();
intent3.setClass(MainActivity.this, MyAudioRecord.class);
startActivityForResult(intent3, 2);
break;
}
}
};
}
[size=small][color=brown][b]使用MediaRecoreder实现音频录制:[/b][/color][/size]
package com.example.media_record;
import java.io.File;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
/* 启动自定义的音频录制程序来完成录制的工作
*
* 权限: 为了可以录制音频需要:RECORD_AUDIO权限
* 权限:为了可以写入SDCard,需要:WRITE_EXTERNAL_STORAGE权限;
*
* */
public class MyMediarRecorder extends Activity {
private TextView stateView;
private Button start,stop,play,finish;
private MediaRecorder recorder;
private File audioFile;
private Uri fileUri;
private MediaPlayer mediaPlayer;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.media_recorder_layout);
/* 获取组件对象 */
stateView = (TextView) findViewById(R.id.stateView);
start = (Button) findViewById(R.id.start);
stop = (Button) findViewById(R.id.stop);
play = (Button) findViewById(R.id.play);
finish = (Button) findViewById(R.id.finish);
start.setOnClickListener(listener);
stop.setOnClickListener(listener);
play.setOnClickListener(listener);
finish.setOnClickListener(listener);
stop.setEnabled(false);
play.setEnabled(false);
}
/* 事件:处理用户的动作 */
OnClickListener listener = new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.start:
/* 开始录制 *//* 需要一个MediaRecorder对象 */
recorder = new MediaRecorder();
/* 指定MIC(Microphone audio source) */
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
/* 指定音频文件保存的格式 */
/* THREE_GPP: 录制后文件是一个3gp 文件,支持视频和音频录制 */
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
/* 指定Audio 编码方式,目前只有AMR_NB格式 */
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
/* 指定录制文件的存储路径 */
File fpath = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/data/files/");
/* 创建文件夹 */
fpath.mkdirs();
try{
/* 创建临时文件 *//* 参数:前缀 ,后缀,目录地址 */
audioFile = File.createTempFile("recording", ".3gp", fpath);
}catch(Exception ex){
Toast.makeText(MyMediarRecorder.this, "临时文件创建失败", 1000).show();
}
/* 设置文件的存储位置 */
recorder.setOutputFile(audioFile.getAbsolutePath());
/* 开始录制 */
try{
/* 准备 */
recorder.prepare();
}catch(Exception ex){
Toast.makeText(MyMediarRecorder.this, "录音失败", 1000).show();
}
/* 开始 */
recorder.start();
stateView.setText("正在录制...");
start.setEnabled(false);
play.setEnabled(false);
stop.setEnabled(true);
break;
/*********************************************************/
case R.id.stop:
/* 停止录制 */
recorder.stop();
/* 释放资源 */
recorder.release();
/* 然后将录制的文件存储在MediaStore中 ,实现数据共享*/
ContentValues values = new ContentValues();
values.put(MediaStore.Audio.Media.TITLE, "this is my first recored_audio");
values.put(MediaStore.Audio.Media.DATE_ADDED, System.currentTimeMillis());
values.put(MediaStore.Audio.Media.DATA, audioFile.getAbsolutePath());
/* 获取插入数据的Uri */
fileUri = getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);
/* 录制结束后 ,实例化一个MediaPlayer对象,播放*/
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
/* 更新状态 */
stateView.setText("准备录制...");
play.setEnabled(true);
start.setEnabled(true);
stop.setEnabled(false);
}
});
/* 准备播放 */
try{
mediaPlayer.setDataSource(audioFile.getAbsolutePath());
mediaPlayer.prepare();
}catch(Exception ex){
}
/* 更新状态 */
stateView.setText("准备播放");
play.setEnabled(true);
start.setEnabled(true);
stop.setEnabled(false);
break;
case R.id.play:
/* 播放录音 *//* 在录音结束的时候,已经实例化了MediaPlayer , 做好了播放的准备 */
mediaPlayer.start();
/* 更新状态 */
stateView.setText("正在播放");
start.setEnabled(false);
stop.setEnabled(false);
play.setEnabled(false);
break;
case R.id.finish:
/* 完成录制,返回录制的音频的Uri */
Intent intent = new Intent();
intent.setData(fileUri);
this.setResult(RESULT_OK,intent);
this.finish();
break;
default:
break;
}
}
private void finish() {
// TODO Auto-generated method stub
}
private void setResult(int resultOk, Intent intent) {
// TODO Auto-generated method stub
}
};
}