我正在写一个基本的声卡。我已经把它放到我的手机上了,它工作得很好。很大程度上是这样。前7个按钮有效,但第8和第9个按钮无效。我唯一的想法是这是一个内存问题,我不应该在程序开始的时候同时创建所有9个mp。也许8号和9号对记忆来说有点太多了。
有没有人知道为什么第8和第9个按钮在下面的代码中不起作用?它们可以在模拟器中工作,但会使我的手机崩溃。我知道代码并不完美--我正在学习。但是,如果有一个正确的方向,那就太好了。
感谢您能提供的任何帮助!
package testing.Variables.Levack;
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.view.View;
import android.media.MediaPlayer;
public class TestingVariablesActivity extends Activity {
/** Called when the activity is first created. */
TextView tt;
Button messageButton1,messageButton2,messageButton3,messageButton4,messageButton5,messageButton6,messageButton7,messageButton8,messageButton9;
MediaPlayer mp1,mp2,mp3,mp4,mp5,mp6,mp7,mp8,mp9 = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mp1 = MediaPlayer.create(this, R.raw.baboon);
mp2 = MediaPlayer.create(this, R.raw.backoff);
mp3 = MediaPlayer.create(this, R.raw.dark6);
mp4 = MediaPlayer.create(this, R.raw.dontneedroads);
mp5 = MediaPlayer.create(this, R.raw.hua);
mp6 = MediaPlayer.create(this, R.raw.hulk);
mp7 = MediaPlayer.create(this, R.raw.itsaclipon);
mp8 = MediaPlayer.create(this, R.raw.ht);
mp9 = MediaPlayer.create(this, R.raw.truth1);
messageButton1=(Button)findViewById(R.id.messageButton1);
messageButton1.setOnClickListener(startListener);
messageButton2=(Button)findViewById(R.id.messageButton2);
messageButton2.setOnClickListener(startListener);
messageButton3=(Button)findViewById(R.id.messageButton3);
messageButton3.setOnClickListener(startListener);
messageButton4=(Button)findViewById(R.id.messageButton4);
messageButton4.setOnClickListener(startListener);
messageButton5=(Button)findViewById(R.id.messageButton5);
messageButton5.setOnClickListener(startListener);
messageButton6=(Button)findViewById(R.id.messageButton6);
messageButton6.setOnClickListener(startListener);
messageButton7=(Button)findViewById(R.id.messageButton7);
messageButton7.setOnClickListener(startListener);
messageButton8=(Button)findViewById(R.id.messageButton8);
messageButton8.setOnClickListener(startListener);
//messageButton9=(Button)findViewById(R.id.messageButton9);
//messageButton9.setOnClickListener(startListener);
}
private OnClickListener startListener =new OnClickListener() {
public void onClick(View v)
{
switch(v.getId()) {
case R.id.messageButton1:
mp1.start();
break;
case R.id.messageButton2:
mp2.start();
break;
case R.id.messageButton3:
mp3.start();
break;
case R.id.messageButton4:
mp4.start();
break;
case R.id.messageButton5:
mp5.start();
break;
case R.id.messageButton6:
mp6.start();
break;
case R.id.messageButton7:
mp7.start();
break;
case R.id.messageButton8:
mp8.start();
break;
// case R.id.messageButton9:
// mp9.start();
//break;
}
}
};
}发布于 2012-06-30 00:59:34
我以前也遇到过类似的问题--这个问题似乎更多的是声音方面的问题。我创建了一个MediaPlayers集合,在第七个集合之后,它会在使用某些设备时崩溃,在我的例子中是Droid X2。
在X2上创建各种MediaPlayer实例时,在8号MediaPlayer创建的Logcat将始终捕获java.io.IOException: Prepare failed.: status=0x1。当我在其他几个设备上测试时,这个错误从未出现过。
顺便说一句,当你使用完MediaPlayer时,一定要调用mp1.release(); -我已经追踪到了大量的内存泄漏,导致这些资源无法释放。
发布于 2012-06-29 23:38:40
如果你的声音不是很长,也许你应该使用SoundPool类而不是MediaPlayer解决方案。它可以让你更好地管理许多声音,也可以同时进行。
这是文档:http://developer.android.com/reference/android/media/SoundPool.html
这是一个很好的起点:http://www.droidnova.com/creating-sound-effects-in-android-part-1,570.html
这是一篇简短的文章,介绍了SoundPool和MediaPlayer http://www.stealthcopter.com/blog/2010/08/android-soundpool-vs-mediaplayer-focus-on-soundboards-and-memory-problems/之间的区别
https://stackoverflow.com/questions/11264664
复制相似问题