我正在尝试创建一个简单的 Sound-board Android 应用程序,使用 ListView 项目作为按钮。(顺便说一句,我是新手程序员)
这个想法是我按下一个按钮,然后播放一个特定的声音文件。如果我在播放声音时按下任何按钮,它应该首先停止该声音,然后开始播放新声音。
目前,声音在不停止任何当前播放的声音的情况下播放,因此如果我向按钮发送垃圾邮件,我会同时播放多个声音(如果我一次按下太多,应用程序强制关闭)。
我尝试使用以下几种变体:
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/”。