【问题标题】:android play sound from sd-cardandroid从sd卡播放声音
【发布时间】:2012-01-16 16:35:56
【问题描述】:

我需要从 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)

【问题讨论】:

  • 确保你的路径是正确的
  • 一旦你得到答案,请接受你认为最好的答案之一。

标签: android audio


【解决方案1】:

player.start() 放在 try,catch 块中。因为如果播放器没有准备好你的歌曲,你仍然在调用 start 方法。start 方法只在播放准备好后调用, 意味着准备成功。另一件事是当您的播放器不再播放时您必须释放媒体播放器。否则会有很多播放器对象在后台运行。

【讨论】:

    【解决方案2】:

    由于某种原因,您的 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();
    }
    

    【讨论】:

      【解决方案3】:

      我自己试过你的代码:

      当我只输入"sdcard/1.mp3"时,我的工作正常

      您确保路径正确与否

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

      注意: 如果您正在尝试使用您的方法 soundplay 以停止以前的音频并播放新的音频文件,那么最好是 not 在该方法中执行此操作

      mMediaPlayer = new MediaPlayer();
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多