我正在尝试播放特定活动时播放的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文件夹中)。 有人知道我该怎么做才能使它有效?
提前致谢!
答案 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;
}
}