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