public class SimpleRecorderActivity extends Activity{private static final String SOUND_FILE_NAME = "/sound";private ListView mListView;private Button mStartBtn;private Button mStopBtn;private MediaRecorder mAudioRecorder;private MediaPlayer mAudioPlayer;private String mSoundDirPath;private File[] mSoundFiles;private int mListLength;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_simple_recorder);init();}/** * 初始化界面 */private void init() {if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {Toast.makeText(SimpleRecorderActivity.this, "SD卡不存在,请插入SD卡!", Toast.LENGTH_SHORT).show();return;}//获得录音保存路径mSoundDirPath = Environment.getExternalStorageDirectory().getAbsolutePath()+ Consts.FOOLISH_PATH + Consts.FOOLISH_SOUND_PATH;initListView();mStartBtn = (Button)findViewById(R.id.btn_simple_recorder_start);mStartBtn.setOnClickListener(onClickListener);mStopBtn = (Button)findViewById(R.id.btn_simple_recorder_stop);mStopBtn.setOnClickListener(onClickListener);}/** * 初始化列表 */private void initListView() {mListView = (ListView)findViewById(R.id.lv_simple_recorder);List<String> list = getData(new File(mSoundDirPath));ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(SimpleRecorderActivity.this, android.R.layout.simple_list_item_1, list); mListView.setAdapter(arrayAdapter);mListView.setOnItemClickListener(new onItemClickListener());mListLength = mListView.getCount();}/** * 遍历目录 * @param file * @return */private List<String> getData(File file) {List<String> list = new ArrayList<String>(); mSoundFiles = file.listFiles();for(int i=0; i<mSoundFiles.length; i++) {if(!mSoundFiles[i].isDirectory()) {list.add(mSoundFiles[i].getName());}}return list;}/** * 开始录音 */private void startRecorder() {try {mAudioRecorder = new MediaRecorder();//设置MediaRecorder的音频源为麦克风mAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置MediaRecorder录制的音频格式mAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置MediaRecorder录制音频的编码为AMRmAudioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置录制好的音频文件保存路径mAudioRecorder.setOutputFile(getSoundFile(mSoundDirPath, SOUND_FILE_NAME + mListLength + ".amr").getAbsolutePath());//准备录制mAudioRecorder.prepare();//开始录制mAudioRecorder.start();} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}//只允许点击停止按钮mStartBtn.setEnabled(false);mStopBtn.setEnabled(true);mListView.setEnabled(false);}/** * 停止录音 */private void stopRecorder() {if(mAudioRecorder != null) {mAudioRecorder.stop();mAudioRecorder.release();mAudioRecorder = null;//只允许点击开始按钮mStartBtn.setEnabled(true);mStopBtn.setEnabled(false);mListView.setEnabled(true);}}/** * 获得音频文件 * @param dirpath * @param filename * @return */private File getSoundFile(String dirpath, String filename) {File dir = null;File file = null;try {//创建目录dir = new File(dirpath);if(!dir.exists() || !dir.isDirectory()) {dir.mkdirs();}//创建文件file = new File(dirpath + filename);if(!file.exists()) {file.createNewFile();}} catch(Exception e) {e.printStackTrace();}return file;}private View.OnClickListener onClickListener = new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_simple_recorder_start:startRecorder();break;case R.id.btn_simple_recorder_stop:stopRecorder();initListView();break;}}};private class onItemClickListener implements OnItemClickListener {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {if(mSoundFiles.length <= position) {return;}try {String filepath = mSoundFiles[position].getAbsolutePath();//创建一个MediaPlayer去播放指定音频文件mAudioPlayer = new MediaPlayer();mAudioPlayer.setDataSource(filepath);mAudioPlayer.prepare();mAudioPlayer.start();} catch (Exception e) {e.printStackTrace();}//显示一个对话框,告知哪个音频文件正在播放AlertDialog.Builder builder = new AlertDialog.Builder(SimpleRecorderActivity.this);builder.setMessage(mSoundFiles[position].getName() + "正在播放...").setPositiveButton("停止", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {if(mAudioPlayer != null && mAudioPlayer.isPlaying()) {mAudioPlayer.stop();}}}).create();final Dialog dialog = builder.show();//当音频文件播放完毕后,对话框自动关闭mAudioPlayer.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {mp.release();dialog.dismiss();}});}}@Overrideprotected void onDestroy() {super.onDestroy();stopRecorder();if(mAudioPlayer != null) {mAudioPlayer.release();mAudioPlayer = null;}};}

更多相关文章

  1. Renderer (专门用于渲染3D 的接口 Renderer )()
  2. Android(安卓)小技巧之自定义 Dialog
  3. 图表引擎AChartEngine 一
  4. android studio listview控件基础
  5. gradle.properties使用
  6. 两种方法实现卫星式菜单
  7. Universal Image Loader for Android(安卓)说明文档
  8. 安卓编译环境设置
  9. android+SurfaceView+path+onTouchEvent画图

随机推荐

  1. 设置ImageView的大小
  2. Android(安卓)Studio JNI开发
  3. linux下通过命令行更新android sdk
  4. android:descendantFocusability 焦点 父
  5. android widget ViewFlipper
  6. Android(安卓)Binder原理(一)学习Binder前
  7. 底部菜单
  8. CheckBox as Image use button
  9. 系出名门Android(1) - 在 Windows 下搭建
  10. (已解决)Android(安卓)Studio JVM报错解决