2

我有一个声音片段,只需单击一个按钮(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: 资源 ID #0x7f040006

我的文件也是 .wav 文件。我注意到 .mp3 文件没有这个问题,即使它们的文件大小相同。

4

3 回答 3

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);


            }});
于 2012-10-31T09:18:50.830 回答
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

-请选择bitrate128kb/sec 和 22050KHz sampling rate,完整播放声音片段

于 2012-10-31T09:34:21.720 回答
1

首先 stop 是媒体播放器,然后release是它。

于 2012-10-31T10:53:43.073 回答