实现录音之后播放所录声音的主要代码:
playStop = (ImageButton) findViewById(R.id.button2); //播放停止按钮
playStopText=(TextView) findViewById(R.id.textView3);
final MediaPlayer mPlayer=new MediaPlayer();
playStop.setOnClickListener(new View.OnClickListener(){ //为按钮添加监听事件
public void onClick(View view) {
count++; //第一次点击实现播放功能,按钮下方显示stop
int i=count%2; //第二次点击停止播放,按钮下方显示play
switch (i)
{
// 单击播放按钮
case 1:
playStopText.setText(" Stop");
try
{
File file=new File(Environment
.getExternalStorageDirectory()
.getCanonicalFile() + "/Recondsound.amr"); //注意后缀名!!!
FileInputStream fis=new FileInputStream(file);
mPlayer.setDataSource(fis.getFD());
mPlayer.prepare();
mPlayer.start();
}
catch (Exception e)
{
e.printStackTrace();
}
break;
// 单击停止按钮
case 0:
playStopText.setText(" Play");
try
{
mPlayer.stop();
}
catch(Exception e)
{
e.printStackTrace();
}
break;
}
}
});
实现中的问题:
1、java.io.FileNotFoundException: /mnt/sdcard/Recordsound (No such file or directory)
解决:在文件后面添加后缀名
2、at android.media.MediaPlayer.prepare()(Native Method)
解决:查阅资料说这是Android 文件夹权限引起的MediaPlayer播放不正常,也就是说直接使用代码:
MediaPlayer mPlayer=new MediaPlayer();
mPlayer.setDataSource("文件路径");
mPlayer.prepare();
mPlayer.start();
默认创建的声音文件是不可读的,导致无法读取数据,在MediaPlayer.prepare()时总是失败。
应使用MediaPlayer.setDataSource((new FileInputStream(new File(soundFilePath))).getFD());方法加载指定音频
故将代码改为:
File file=new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/Recondsound.amr");
FileInputStream fis=new FileInputStream(file);
mPlayer.setDataSource(fis.getFD());
mPlayer.prepare();
mPlayer.start();