2012-04-26 7 views
1

У меня есть действие, которое имеет ряд кнопок, которые при нажатии должны воспроизводить аудиофайл. Я пытался реализовать это с помощью MediaPlayer, но я не могу заставить его работать. Вот код, который я пытался:Ошибка MediaPlayer android

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

        } 
     } 
    }); 

ответ

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? – user1356791

+0

убедитесь, что loaction raw является 'res/raw /' и u использует 'mp.setDataSource (CurrentActivity.this, R.raw.greet_1);' –

+0

Это res/raw. Я не могу понять, почему он не работает? – user1356791

0

Ifyou хочет отправить объект медиа-плеер с одним из файлов fromapplication сырьевых ресурсов или активов приложений файлов вы можете dothat следующим образом :

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): \t на android.media.MediaPlayer.setDataSource (собственный метод) Это то, что происходит при нажатии кнопок после добавления кода – user1356791

0

Wh y не только использовать

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

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

+0

Это не работает. говорит: «Конечная локальная переменная mp не может быть назначена, поскольку она определена в закрывающем типе» Все еще изо всех сил пытаюсь получить эту работу – user1356791

0

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

Смежные вопросы