Я пытаюсь создать простое Android-приложение Sound-board, используя элементы 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.
}
});
}
}
Любая помощь будет оценена, спасибо.
Редактировать (22 марта):
Я нашел следующий фрагмент кода, который должен работать:
mp.setDataSource(context, Uri.parse("android.resource://" + Config.PACKAGE + "/" + resId));
Но я не могу понять, как работает часть "Config.PACKAGE". Я просто получаю сообщение об ошибке «ПАКЕТ не может быть разрешен или не является полем».
Я попытался заменить "ПАКЕТ" на имя пакета, та же ошибка. Я также попробовал:
try {
mp.setDataSource(getApplicationContext(),Uri.parse("android.resource://com.mptest/" + R.raw.test2));
} catch (IOException e) {
e.printStackTrace();
}
Но я не могу работать, что именно поставить вместо "//com.mptest/".