У меня есть активность, у которой есть серия кнопок, которые при нажатии должны воспроизводить аудиофайл. Я пытался реализовать это с помощью MediaPlayer, но я не могу заставить его работать. Вот код, который я пытался:
final MediaPlayer mp = new MediaPlayer();
Button ger1play = (Button) findViewById(R.id.ger1play);ger1play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.setDataSource(this, R.raw.greet_1);
mp.prepare();
mp.start();
}
});
Метод setDateSource, похоже, не работает, может ли кто-нибудь сказать мне, где я ошибаюсь? Я хотел бы затем установить mediaPlayer в соответствующий аудиофайл, на основе которого нажата кнопка, возможно ли это?
обновленный
final MediaPlayer mp = new MediaPlayer();
Button ger1play = (Button) findViewById(R.id.ger1play);ger1play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Uri myUri = Uri.parse(R.raw.greet_1);
mp.setDataSource(GreetingsLesson.this, R.raw.greet_1);
mp.prepare();
mp.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
попробуй это:
final MediaPlayer mp = new MediaPlayer();
Button ger1play = (Button) findViewById(R.id.ger1play);ger1play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
mp.setDataSource(CurrentActivity.this, R.raw.greet_1);
mp.prepare();
mp.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
Вы используете это в эмуляторе? Если это так, проверьте, что ваш менеджер AVD находится под аппаратным обеспечением, добавлено свойство "Поддержка воспроизведения звука" да "
Почему бы просто не использовать
mp = MediaPlayer.create(this, R.raw.greet_1);
Тогда вам не нужно готовиться или начинать.
Если вы хотите отправить объект медиаплеера одним из файлов из исходных ресурсов приложения или из файлов активов приложения, вы можете выполнить следующее:
try {
AssetFileDescriptor fd = getResources().openRawResouceFd(R.raw.greet_1);
mp.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
mp.start();
fd.close();
} catch (IllegalArgumentException e) {
// handle exception
} catch (IllegalStateException e) {
// handle exception
} catch (IOException e) {
// handle exception
}
res/raw/
и вы используетеmp.setDataSource(CurrentActivity.this, R.raw.greet_1);