我正在尝试使用ListView项目作为按钮创建一个简单的Sound-board Android应用程序. (顺便说一句,我是新手程序员)
我的想法是按下按钮,播放特定的声音文件.如果我在播放声音时按任何按钮,它应首先停止该声音,然后开始播放新声音.
目前声音播放时不会停止任何当前正在播放的声音,所以如果我发送垃圾按钮,我会同时播放多个声音(如果我一次按太多声音,应用程序强制关闭).
我尝试过使用以下几种变体:
if (mp.isPlaying()) {
mp.stop();
}
但根据我在其他几个来源上读到的内容,我正在创建MediaPlayer类的多个实例,即使它们具有相同的名称,stop()方法也会尝试停止最新的mp实例(在某些情况下它不是甚至还没创造出来.
我猜我的MediaPlayer类的一般实现是错误的,但它是我能想到的最好的.
无论如何,这是相关的代码块:
public class soundTest extends Activity {
private ListView lv1;
private String lv_arr[]={"test 1","test 2","test 3","test 4","test 5"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv1=(ListView)findViewById(R.id.ListView01);
lv1.setAdapter(new ArrayAdapter<String>(this,R.layout.list_item, lv_arr));
lv1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
if (lv1.getItemAtPosition(position)=="test 1") {
MediaPlayer mp = MediaPlayer.create(getApplicationContext(),R.raw.sound1);
mp.start();
mp.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
}
if (lv1.getItemAtPosition(position)=="test 2") {
MediaPlayer mp = MediaPlayer.create(getApplicationContext(),R.raw.sound2);
mp.start();
mp.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
}
//And the rest of the sounds 3,4,5.
}
});
}
}
任何帮助将不胜感激,谢谢.
编辑(3月22日):
我找到了以下应该有效的代码:
mp.setDataSource(context, Uri.parse("android.resource://" + Config.PACKAGE + "/" + resId));
但是,我无法弄清楚“Config.PACKAGE”部分是如何工作的.我只是得到一个错误“PACKAGE无法解决,或者不是一个字段”.
我尝试用包名替换“PACKAGE”,同样的错误.我也尝试过:
try {
mp.setDataSource(getApplicationContext(),Uri.parse("android.resource://com.mptest/" + R.raw.test2));
} catch (IOException e) {
e.printStackTrace();
}
但我无法正确地代替“//com.mptest/”.
解决方法:
全局变量MediaPlayer需要设置为private static.这引起了我好几次.