Android学习:播放功能的实现

 实现录音之后播放所录声音的主要代码:

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();


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值