MediaPlayer ошибка Android

1

У меня есть активность, у которой есть серия кнопок, которые при нажатии должны воспроизводить аудиофайл. Я пытался реализовать это с помощью 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();

                    }
       }
    });
Теги:
media-player

4 ответа

1

попробуй это:

     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();

                  }
     }
  });
  • 0
    Когда я попробовал этот Eclipse, все еще выдает ошибку, и он предлагает изменить тип greet_1 на Uri?
  • 0
    убедитесь, что loaction of raw является res/raw/ и вы используете mp.setDataSource(CurrentActivity.this, R.raw.greet_1);
Показать ещё 9 комментариев
0

Вы используете это в эмуляторе? Если это так, проверьте, что ваш менеджер AVD находится под аппаратным обеспечением, добавлено свойство "Поддержка воспроизведения звука" да "

0

Почему бы просто не использовать

mp = MediaPlayer.create(this, R.raw.greet_1);

Тогда вам не нужно готовиться или начинать.

  • 0
    Это не работает, так как он говорит: «Конечная локальная переменная mp не может быть назначена, так как она определена в включающем типе».
0

Если вы хотите отправить объект медиаплеера одним из файлов из исходных ресурсов приложения или из файлов активов приложения, вы можете выполнить следующее:

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
}
  • 0
    04-26 15: 08: 26.326: E / MediaPlayer (528): вызывается метод attachNewPlayer в состоянии 8 04-26 15: 08: 26.326: W / System.err (528): java.lang.IllegalStateException 04-26 15:08 : 26.326: W / System.err (528): at android.media.MediaPlayer.setDataSource (собственный метод). Это происходит при нажатии кнопок после добавления кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню