Android:媒体播放器发布和空问题?

Android:媒体播放器发布和空问题?,android,Android,我有一个声音咬,播放一个按钮点击(2秒)。完成后,我启动了一项新活动,并发布了媒体播放器 但是我的应用程序在这个时候崩溃了 我的代码 final ImageButton TtriangleButton=(ImageButton)findViewById(R.id.triangleTriangle); TtriangleButton.setOnClickListener(new View.OnClickListener() { public void onClick(Vi

我有一个声音咬,播放一个按钮点击(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文件没有此问题,即使它们的文件大小相同。

在开始类似这样的新活动之前释放media player::

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


            }});
这样试试

-您应该
释放它,然后在播放完成后分配
null

-然后当您想播放另一种声音时,再次
初始化
媒体播放器

 mPlayer.start();
 mPlayer.setOnCompletionListener(new OnCompletionListener() {

 @Override
public void onCompletion(MediaPlayer mp) {

             mPlayer.release();  // 
             mPlayer = null;

        }
});
-如果您只播放2秒的声音片段,请使用
SoundPool
执行此操作,因为
SoundPool
适用于此类声音片段。

以下是声音池的一些限制:
声音池

-声音文件应不超过1 MB

-使用
.wav
声音文件可获得最佳效果,使用
.mp3、.mp4、.m4a

-请使用128kb/秒的
比特率和22050KHz的
采样率
,以完成声音剪辑的播放

首先
停止

媒体播放器,然后释放它。

在释放媒体播放器后,尝试将其设置为null,并进行一次更改以全局创建媒体播放器实例。希望它可以帮助您:)为什么尝试将变量设置为null?在上面的代码中-当我插入mPlayer=null时;-->它给了我一个编译错误->“无法分配最终的局部变量mediaPlayer,因为它是在封闭类型中定义的”。知道原因吗?@Jasma声明类作用域中的
MediaPlayer
类型的
mPlayer
。我可以确认,不设置MediaPlayer object=null强制立即垃圾收集可能会导致以后出现非法状态错误。在我的例子中,我在活动的onDestroy()方法中释放了播放器,但是当我重新启动应用程序时,我会得到错误。在release()之后将其设置为null修复了它。