Android:Media Player发布和null问题?

时间:2012-10-31 09:08:31

标签: android

我只需点击一下按钮(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文件没有这个问题,即使它们都是相同的文件大小。

3 个答案:

答案 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它。