Java 安卓声音重置
每次按下按钮时,我的应用程序都会播放硬币声音Java 安卓声音重置,java,android,audio,android-mediaplayer,Java,Android,Audio,Android Mediaplayer,每次按下按钮时,我的应用程序都会播放硬币声音 coin_sound.start(); 您可以轻松地按快于硬币的声音。当这种情况发生时,我希望每次按下按钮时硬币的声音都能从头开始 if(coin_sound.isPlaying()){ coin_sound.reset(); coin_sound = MediaPlayer.create(getContext(), R.raw.coin02); } coin_sound.start(); 问题是加载一个可能很小的媒体文件仍然是一
coin_sound.start();
您可以轻松地按快于硬币的声音。当这种情况发生时,我希望每次按下按钮时硬币的声音都能从头开始
if(coin_sound.isPlaying()){
coin_sound.reset();
coin_sound = MediaPlayer.create(getContext(), R.raw.coin02);
}
coin_sound.start();
问题是加载一个可能很小的媒体文件仍然是一个相对缓慢的过程。当你开始快速点击按钮时,应用程序就会严重滞后
我的问题有什么解决办法吗?我唯一的想法是用一系列硬币声音做一些事情,但这种方法看起来会很混乱和粗糙…这是因为你在按钮点击事件中启动硬币声音,试试这个 在oncreate方法中启动此变量
coin_sound = MediaPlayer.create(getContext(), R.raw.coin02);
然后将此代码作为按钮的代码
if(coin_sound.isPlaying()){
coin_sound.reset();
}
coin_sound.start();
问题是,每次单击按钮时,您都在重新创建新媒体播放器,因此新媒体播放器不会认为有声音
你需要用
coin_sound.start()重新开始吗代码>?不重新启动停止然后为您启动声音吗?这是因为您在按钮单击事件中启动硬币声音,请尝试此操作
在oncreate方法中启动此变量
coin_sound = MediaPlayer.create(getContext(), R.raw.coin02);
然后将此代码作为按钮的代码
if(coin_sound.isPlaying()){
coin_sound.reset();
}
coin_sound.start();
问题是,每次单击按钮时,您都在重新创建新媒体播放器,因此新媒体播放器不会认为有声音
你需要用coin_sound.start()重新开始吗代码>?不重新启动停止然后为您启动声音吗?这里发布的另一个答案有些正确。您不应该反复调用create
不过,答案中的代码有一个问题。reset
方法将MediaPlayer
发送到空闲状态,在此状态下调用大多数其他方法是非法的。如果要走这条路线,必须按以下顺序调用方法:
coin_sound.reset();
coin_sound.setDataSource(...);
coin_sound.prepare();
coin_sound.start();
调用create
和前面的方法调用序列之间的区别只是创建了一个新实例。然而,这并不是做应该做的事情的最快方式
您只需调用coin\u sound.seekTo(0)代码>当您希望重新启动当前播放声音时。所以你可以这样做:
if (coin_sound.isPlaying()) coin_sound.seekTo(0);
else coin_sound.start();
这假设您已将MediaPlayer
保持在准备状态,因此可以调用start
。您可以通过在onCompletion
侦听器中调用reset
、setDataSource
和prepare
来实现这一点。另外,当不再需要声音时,请务必呼叫release
。此处发布的另一个答案有些正确。您不应该反复调用create
不过,答案中的代码有一个问题。reset
方法将MediaPlayer
发送到空闲状态,在此状态下调用大多数其他方法是非法的。如果要走这条路线,必须按以下顺序调用方法:
coin_sound.reset();
coin_sound.setDataSource(...);
coin_sound.prepare();
coin_sound.start();
调用create
和前面的方法调用序列之间的区别只是创建了一个新实例。然而,这并不是做应该做的事情的最快方式
您只需调用coin\u sound.seekTo(0)代码>当您希望重新启动当前播放声音时。所以你可以这样做:
if (coin_sound.isPlaying()) coin_sound.seekTo(0);
else coin_sound.start();
这假设您已将MediaPlayer
保持在准备状态,因此可以调用start
。您可以通过在onCompletion
侦听器中调用reset
、setDataSource
和prepare
来实现这一点。另外,请确保在不再需要声音时调用release
。根据我的知识重置不会重新启动声音,它会删除声音。根据我的知识重置不会重新启动声音,它会删除声音。