录音相关权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>


主程序代码:

package com.yqy.yqy_record;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import android.annotation.SuppressLint;import android.app.Activity;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.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.Button;import android.widget.ListView;import android.widget.SimpleAdapter;public class MainActivity extends Activity {private Button btn;private ListView lv;private SimpleAdapter adapter;private MediaRecorder recorder;private static final String RECORD_DIR = "temp_record";// 获得存储在外部的路径private File dir = new File(Environment.getExternalStorageDirectory(),RECORD_DIR);private List<Map<String, String>> records = new ArrayList<Map<String, String>>();private String currnetPath;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn = (Button) findViewById(R.id.recordBtn);lv = (ListView) findViewById(R.id.recordList);checkDir();adapter = new SimpleAdapter(this, records, R.layout.list_cell,new String[] { "name" }, new int[] { R.id.cell_tv });refreshAdapter();lv.setAdapter(adapter);lv.setOnItemClickListener(new OnItemClickListener() {@SuppressWarnings("unchecked")@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3) {Map<String, String> map = (Map<String, String>) adapter.getItem(position);System.out.println(map);final MediaPlayer mp = MediaPlayer.create(MainActivity.this,Uri.fromFile(new File(map.get("path"))));if(mp==null){return;}mp.start();mp.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer arg0) {mp.release();}});}});btn.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:recorder = new MediaRecorder();// 这边这几个方法调用的顺序不能错recorder.setAudioSource(MediaRecorder.AudioSource.MIC);recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 获得当前存放文件的地址currnetPath = getPath();recorder.setOutputFile(currnetPath);try {recorder.prepare();} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}recorder.start();break;case MotionEvent.ACTION_UP:if (recorder != null) {try {recorder.stop();refreshAdapter();} catch (RuntimeException stopException) {// 这个异常出现在录制之后马上停止了stopException.printStackTrace();File file = new File(currnetPath);if (file.exists()) {// 抛出异常的话就删掉错误的文件file.delete();}}finally{recorder.release();recorder = null;}}break;}return false;}});}private void checkDir() {if (!dir.exists()) {dir.mkdir();}}/** * 刷新数据 */private void refreshAdapter() {records.clear();for (File file : dir.listFiles()) {Map<String, String> map = new HashMap<String, String>();map.put("name", file.getName());map.put("path", file.getAbsolutePath());records.add(map);}adapter.notifyDataSetChanged();}@SuppressLint("SimpleDateFormat") private String getPath() {String name = new SimpleDateFormat("yyyyMMdd_HHmmss_SS").format(new Date());File path = new File(dir, name + ".amr");return path.getAbsolutePath();}}


更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. AndroidManifest.xml配置文件选项详解
  4. Android的NDK开发(5)————Android(安卓)JNI层实现文件的read
  5. windows下搭建cocos2dx Android开发环境
  6. Android(安卓)文件操作
  7. Android手机拍照和手机相册选取图片的工具类ImageUtils
  8. android之File
  9. Android(安卓)Ant打包及其环境变量配置

随机推荐

  1. 带你深入了解XML
  2. Android 淡入淡出动画xml配置代码展示
  3. XSL将XML中的CDATA注释输出为HTML文本的
  4. RSS全站静态输出和RSS订阅的步骤(dedecms)
  5. ASP.NET读取RSS的实例解析
  6. 关于XML字符的详细介绍
  7. 关于server.xml的9篇文章推荐
  8. 关于xdoc的10篇文章推荐
  9. 关于JTree的文章推荐
  10. 关于SQLite多线程的用法详解