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"));
}
}
}