我想播放声音。它第一次运行良好,但如果我停止它并想重新启动它没有任何反应......任何想法?
final MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sex);
ImageButton andvib = (ImageButton)findViewById(R.id.vib_toggle);
final AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
andvib.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
am.setStreamVolume(AudioManager.STREAM_MUSIC, vol, 0);
Vibrator vibr = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
vibr.cancel();
if(vibrating==false) {
if(style == 0)
vibr.vibrate(durat, 0);
if(style == 1){
vibr.vibrate(staccato, 0);
}
if(style == 2){
vibr.vibrate(wild, 0);
}
try {
mp.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mp.start();
mp.setLooping(true);
vibrating = true;
}
else {
vibrating = false;
mp.stop();
try {
mp.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
vibr.cancel();
}
}
});
答案 0 :(得分:6)
使用MediaPlayer时,您应该始终参考您可以在此处看到的状态更改图:
http://developer.android.com/reference/android/media/MediaPlayer.html
从图中可以看出,在MediaPlayer上调用stop()后,它会进入Stopped状态,你需要再次调用prepare()将其调用Prepared状态,然后再调用play()。
请记住,准备工作可能需要很长时间,因此一直这样做可能会导致糟糕的用户体验,尤其是当您从主线程执行此操作时(UI将在MediaPlayer准备时冻结)。如果你经常播放声音,你应该只准备一次(),然后始终保持在Started,Paused或PlaybackCompleted状态。
Bruno Oliveira,Google开发人员程序工程师
答案 1 :(得分:0)
在第二次致电mp.prepare()
之前,您可能需要致电start()
。