一段时间后声音停止 - Android
Sound stopping after some time - Android
每次单击按钮时都会调用此代码。一段时间后,当我单击按钮时,声音不再显示。我尝试使用另一个音乐文件,也尝试使用 MediaPlayer 而不是 SoundPool,但问题不断发生。
具体的问题是:我点了10下声音还在,再点一下就没了
public void displaySound(Context context){
SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
int soundId = sp.load(context, R.raw.bubble_nice, 1);
sp.play(soundId, 1, 1, 0, 0, 1);
MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.bubble_nice);
mPlayer.start();
}
当声音停止时,日志中显示:E/MediaPlayer: error (1, -19)
我已经尝试了你的代码并找到了解决方案,你可以尝试如下:
首先像
一样全局声明一个媒体播放器对象
MediaPlayer mPlayer;
然后在单击按钮时使用以下方法。
public void displaySound(Context context) {
if (mPlayer != null && mPlayer.isPlaying()) {
mPlayer.stop();
mPlayer.reset();
}
mPlayer = MediaPlayer.create(context, R.raw.bubble_nice);
mPlayer.start();
}
当 activity 暂停时,您必须暂停您的媒体播放器,并且 activity 的 onStart() 方法您不能再次调用它。下面的代码
@Override
protected void onStart() {
mPlayer.reset();
super.onStart();
}
@Override
protected void onPause() {
mPlayer.pause();
super.onPause();
}
@Override
protected void onDestroy() {
mPlayer.stop();
super.onDestroy();
}
我对 BSavaliya 的代码稍作修改后效果更好:
先声明mPlayer为全局变量
if (mPlayer != null )
{
if(mPlayer .isPlaying())
{
mPlayer .stop();
}
mPlayer .reset();
}
每次单击按钮时都会调用此代码。一段时间后,当我单击按钮时,声音不再显示。我尝试使用另一个音乐文件,也尝试使用 MediaPlayer 而不是 SoundPool,但问题不断发生。
具体的问题是:我点了10下声音还在,再点一下就没了
public void displaySound(Context context){
SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
int soundId = sp.load(context, R.raw.bubble_nice, 1);
sp.play(soundId, 1, 1, 0, 0, 1);
MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.bubble_nice);
mPlayer.start();
}
当声音停止时,日志中显示:E/MediaPlayer: error (1, -19)
我已经尝试了你的代码并找到了解决方案,你可以尝试如下:
首先像
一样全局声明一个媒体播放器对象MediaPlayer mPlayer;
然后在单击按钮时使用以下方法。
public void displaySound(Context context) {
if (mPlayer != null && mPlayer.isPlaying()) {
mPlayer.stop();
mPlayer.reset();
}
mPlayer = MediaPlayer.create(context, R.raw.bubble_nice);
mPlayer.start();
}
当 activity 暂停时,您必须暂停您的媒体播放器,并且 activity 的 onStart() 方法您不能再次调用它。下面的代码
@Override
protected void onStart() {
mPlayer.reset();
super.onStart();
}
@Override
protected void onPause() {
mPlayer.pause();
super.onPause();
}
@Override
protected void onDestroy() {
mPlayer.stop();
super.onDestroy();
}
我对 BSavaliya 的代码稍作修改后效果更好: 先声明mPlayer为全局变量
if (mPlayer != null )
{
if(mPlayer .isPlaying())
{
mPlayer .stop();
}
mPlayer .reset();
}