繁体   English   中英

android从SD卡播放声音

[英]android play sound from sd-card

我需要播放SD卡中的声音。 我有必须执行此操作的方法,但是它不起作用。

当我使用这种方法时:

public class AudioPlayService extends Service

{
    MediaPlayer mMediaPlayer;
..............
    public void soundplay(String adr)
        {
            mMediaPlayer = new MediaPlayer();
            try
            {
                if (mMediaPlayer.isPlaying())
                {
                    mMediaPlayer.reset();
                }
                mMediaPlayer.setDataSource(adr);
                mMediaPlayer.prepare();
            } catch (IOException e)
            {
            }
            mMediaPlayer.start();
            mMediaPlayer.setOnCompletionListener(new OnCompletionListener()
            {
                @Override
            public void onCompletion(MediaPlayer mp)
            {
                mp.release();
                mp = null;
            }
        });
    }

其中String adr-它是sd上文件的绝对路径。

然后我称之为:

AudioPlayService s = new AudioPlayService();
s.soundplay(iA.getSdDir() + "Files/Numbers/0.mp3");

我得到一个错误的:

12-09 13:04:13.829: E/MediaPlayer(16997): error (1, -2147483648)
12-09 13:04:13.829: E/MediaPlayer(16997): start called in state 0
12-09 13:04:13.829: E/MediaPlayer(16997): error (-38, 0)
12-09 13:04:13.839: E/MediaPlayer(16997): Error (-38,0)

player.start()放在try,catch块中。 因为如果播放器没有准备好歌曲,您仍然在调用start方法.start方法仅在播放准备好后才调用,这意味着准备成功了。另一件事是您必须在播放器不再播放时释放媒体播放器。有这么多玩家对象在后台运行。

由于某些原因,您的setDataSource()Prepare()失败。 因此,在异常之后,由于播放器未处于“准备就绪”状态, start()给出了错误。 在catch块中添加打印语句以了解异常。 并将start()移到try catch块中。

mMediaPlayer = new MediaPlayer();
try
{
  if (mMediaPlayer.isPlaying())
  {
     mMediaPlayer.reset();
  }
  mMediaPlayer.setDataSource(adr);
  mMediaPlayer.prepare();
  mMediaPlayer.start();
} catch (IOException e)
{
  e.printStackTrace();
}

我自己尝试了您的代码:

当我放"sdcard/1.mp3"时,我的工作正常

您确保路径正确与否

s.soundplay(iA.getSdDir() + "Files/Numbers/0.mp3");

注意:如果你想使你的方法soundplay以便停止以前的声音和播放新的音频文件的话,最好将not以perfom这一点,方法内

mMediaPlayer = new MediaPlayer();

将此放置在构造函数中。 否则,每次调用s.soundplay(path)您都会听到以前的音频以及新的音频。 即,上一个不会停止

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM