在Android应用程序上播放mp3文件

时间:2014-04-16 02:27:13

标签: android

我正在尝试播放特定活动时播放的mp3音乐文件。

" onCreate"活动的方法是以下代码:

@覆盖

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_waiting_group_answer);
startSound();

}

和" startSound"方法是以下方法:

private void startSound() { 
    AssetFileDescriptor afd = null;
    try {
        afd = getAssets().openFd("exploit_music.mp3");
        player = new MediaPlayer();
        player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),
                afd.getLength());
        // player.prepare();
        player.start();
        isPlaying = true;
    } catch (IOException e) {
        System.out.println("BUMMER");
    }
}

当我尝试DEBUG代码时,没有抛出任何异常,并且找到了文件(在assets文件夹中)。 有人知道我该怎么做才能使它有效?

提前致谢!

2 个答案:

答案 0 :(得分:0)

启动时你的播放器可能没准备好了。
在调试模式下,有时间准备它。 尝试在玩家准备好时调用start:

 private void startSound() { 
    AssetFileDescriptor afd = null;
    try {
        afd = getAssets().openFd("exploit_music.mp3");
        player = new MediaPlayer();
        player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),
                afd.getLength());

        player.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){
               public void onPrepared(MediaPlayer p1){
                      p1.start();
                      isPlaying = true;

                  }       
            }
                );       
     } catch (IOException e) {
        System.out.println("BUMMER");
    }
}

答案 1 :(得分:0)

根据MediaPlayer,应在prepare()方法之前调用方法start()。在“状态图”图像中,它的描述非常清楚。

对于您的问题,只需在//之前删除prepare(),实现MediaPlayer.onPreparedListener以调用player.start(),然后使用player.setOnPreparedListener()设置监听器。

private void startSound() { 
AssetFileDescriptor afd = null;
try {
    afd = getAssets().openFd("exploit_music.mp3");
    player = new MediaPlayer();
    player.setOnPreparedListener(this);
    player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),
            afd.getLength());
    player.prepare();
} catch (IOException e) {
    System.out.println("BUMMER");
}

}

并在您的活动中

public class YourActivity extends Activity implements MediaPlayer.onPreparedListener{

    @Override
    public void onPrepared(Mediaplayer arg0){
          arg0.start();
          isPlaying = true;
    }

}