gpt4 book ai didi

Android MediaPlayer 停止后不会再次启动

转载 作者:太空宇宙 更新时间:2023-11-03 12:42:29 25 4
gpt4 key购买 nike

我想播放一个声音。第一次它运行良好,但如果我停止它并想重新启动它,什么也没有发生...有什么想法吗?

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();
}
}
});

最佳答案

在使用 MediaPlayer 时,您应该始终引用您可以在此处看到的状态变化图:

http://developer.android.com/reference/android/media/MediaPlayer.html

从图中可以看出,在调用 MediaPlayer 的 stop() 后,它会进入 Stopped 状态,您需要再次调用 prepare() 将其移动到 Prepared 状态,然后再调用 play()。

请记住,准备工作可能需要很长时间,所以一直这样做可能会导致用户体验不佳,尤其是当您从主线程进行准备时(当 MediaPlayer 正在准备时,UI 会卡住)。如果你经常播放声音,你真的应该只 prepare() 一次,然后始终保持 Started、Paused 或 PlaybackCompleted 状态。

Bruno Oliveira,Google 开发人员计划工程师

关于Android MediaPlayer 停止后不会再次启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5474501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com