我有一个声音咬合,可以单击一个按钮(2秒)。完成后,我打电话给新活动并发布了媒体播放器。
但是我的应用程序崩溃了。
我的代码
final ImageButton TtriangleButton=(ImageButton)findViewById(R.id.triangleTriangle);
TtriangleButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
/* Code for playing the "Very Good" sound */
final MediaPlayer mediaPlayer = MediaPlayer.create(shapeTriangleActivity.this, R.raw.applause);
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Intent myintent1 = new Intent(shapeTriangleActivity.this,LearningTimeMenu.class);
myintent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myintent1);
mediaPlayer.release();
}});
}});
我又有一个问题是,在版本中,我尝试添加一个null以及MediaPlayer = null; - 但是我遇到了一个汇编错误,例如"无法分配最终的本地变量媒体播放器,因为它是在封闭类型中定义的"。
am被困在这个上。需要帮助。
使用错误日志更新
10-31 14:54:45.800:e/androidruntime(859):android.content.res.res.resources $ notfoundException:资源ID#0x7f040006
我的文件也是.wav文件。我注意到.mp3文件没有此问题,即使它们俩都是相同的文件大小。
在开始这样的新活动之前,请发布媒体播放器::
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mediaPlayer.release();
Intent myintent1 = new Intent(shapeTriangleActivity.this,LearningTimeMenu.class);
myintent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myintent1);
}});
以这种方式尝试......
- 您应该 release
,然后在播放的完成后分配null
。
- 然后再次initialize
媒体播放器当您想播放其他声音时。
mPlayer.start();
mPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mPlayer.release(); //
mPlayer = null;
}
});
- 如果您只播放2秒的声音剪辑,请使用SoundPool
来执行此操作,因为SoundPool
是 apt for thisa sounds-clips ....
这很少有 SoundPool
的限制:
- 声音文件应不超过 1 mb。
- 使用.wav
声音文件获得最佳结果,.mp3, .mp4, .m4a
- 请与128KB/sec的bitrate
和22050KHz sampling rate
一起使用,以完成播放声clip
第一个 stop
媒体播放器,然后release
IT。