我只需点击一下按钮(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; - 但是我得到一个编译错误,例如“无法分配最终的局部变量mediaPlayer,因为它是在封闭类型中定义的。”
我坚持这个。需要帮助。
更新了错误日志
10-31 14:54:45.800:E / AndroidRuntime(859):android.content.res.Resources $ NotFoundException:Resource ID#0x7f040006
我的文件也是.wav文件。我注意到.mp3文件没有这个问题,即使它们都是相同的文件大小。
答案 0 :(得分:3)
在开始像这样的新活动之前释放媒体播放器:
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);
}});
答案 1 :(得分:3)
以这种方式试试......
- 您应该release
,然后在播放完毕后分配null
。
- 当您想播放另一种声音时,再次initialize
媒体播放器。
mPlayer.start();
mPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mPlayer.release(); //
mPlayer = null;
}
});
- 如果您只播放2秒的声音片段,请使用SoundPool
执行此操作,因为SoundPool
适合这些声音片段。 ... 强>
以下几点限制 SoundPool
:
- 声音文件应不超过 1 MB。
- 使用.wav
声音文件获得最佳结果,.mp3, .mp4, .m4a
- 为了完整播放声音片段,请使用128kb /秒和22050KHz bitrate
的{{1}}
答案 2 :(得分:1)
首先 stop
媒体播放器然后release
它。