【发布时间】:2014-12-05 03:03:43
【问题描述】:
该应用程序基本上允许用户在单击各种项目时播放动物声音、声音或其他声音。我试图弄清楚我是否以正确的方式执行此操作,因为当用户静音>取消静音>播放声音时,我看到了类似此错误的一些问题:
java.lang.IllegalStateException at
android.media.MediaPlayer.isPlaying(Native Method)
public class GuessActivity extends Activity implements PopupMenu.OnMenuItemClickListener {
public static int[] ssSoundsArray = {R.raw.sbuffalo, R.raw.scamel, R.raw.scat, R.raw.schicken};
public static int[] ssVoicesArray = {R.raw.buffalo, R.raw.camel, R.raw.cat, R.raw.chicken};
MediaPlayer mMediaPlayer;
Context context;
...
}
这是我如何使用 MediaPlayer 的示例:
if(audio_all) {
if(mMediaPlayer != null) {
if(mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
mMediaPlayer.release();
}
}
mMediaPlayer = MediaPlayer.create(this, R.raw.whatever);
mMediaPlayer.start();
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mediaPlayer) {
mMediaPlayer.release();
mMediaPlayer = null;
}
});
}
我为不同的按钮等多次执行此操作,确保在完成后释放(),因为我之前遇到过内存问题。所以上面的异常告诉我isPlaying() 无效,因为MediaPlayer 不存在但由于某种原因它忽略了if(mMediaPlayer != null)
如果有任何东西正在播放,则必须停止,因为用户可以随意随意点击,当然我不希望任何声音相互重叠。
以下是用户静音的方式:
case R.id.action_toggle_sounds:
if(audio_all) {
if(mMediaPlayer != null) {
if(mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
mMediaPlayer.release();
}
}
Toast.makeText(this,"All sounds disabled",Toast.LENGTH_LONG).show();
audio_all = false;
} else {
Toast.makeText(this,"All sounds enabled",Toast.LENGTH_LONG).show();
audio_all = true;
}
return true;
非常感谢任何帮助,非常感谢!
【问题讨论】:
标签: java android android-mediaplayer soundpool