2011-01-17 6 views
0
case R.id.btn7: 
    if (mp != null && mp.isPlaying()) mp.stop(); 
    mp = MediaPlayer.create(a.this, R.raw.aaaa); 
    mp.start(); 
    break; 
case R.id.btn8: 
    if (mp != null && mp.isPlaying()) mp.stop(); 
    mp = MediaPlayer.create(a.this, R.raw.bbbb); 
    mp.start(); 
    break; 

Как я могу использовать setDataSource, чтобы остановить приложение для принудительного закрытия? Пожалуйста помоги! Если я использую его так, затмение выделяет красный setDataSource;Приложение со средствами массовой информации Плеер отключается

public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.btn: 
      if (mp != null && mp.isPlaying()) mp.stop(); 
      mp.setDataSource(zoo.this,R.raw.gata); 
      mp.prepare(); 
      mp.start(); 
      break; 
+0

им создание новая mp для каждой кнопки (всего 16 байт). Как я могу запустить приложение только с одной mp? –

+0

Возможный дубликат [App s downdently down] (http://stackoverflow.com/questions/4708221/app-forces-down-suddently) – kcoppock

+0

mr kcoppock, есть ли у вас какой-либо ответ на эту проблему, пожалуйста, это не то же самое topic –

ответ

2

Хорошо, поэтому я действительно работал над чем-то похожим для проекта хобби, над которым я работал. Прочитав документацию MediaPlayer некоторое время, вот какой метод я придумал (обратите внимание, что это происходит только с одновременным воспроизведением только одного звука):

Во-первых, я создал переопределенный класс Application держать свои глобальные переменные - в этом случае, мой единственный объект MediaPlayer:

public class GlobalVars extends Application { 
    private static MediaPlayer mp = new MediaPlayer(); 

    public static MediaPlayer getMediaPlayer() { 
     return mp; 
    } 
} 

Это создает один экземпляр MediaPlayer раз начинается применение. Он также является статическим, поэтому он доступен без необходимости создания экземпляра класса.

Теперь в моем главном классе (особенно в моем методе OnClick), я получить этот экземпляр, сбросить его, установить мой источник данных, подготовить его к игре, а затем запустить его:

MediaPlayer mp = GlobalVars.getMediaPlayer(); 

//note that in my case, item is an object of mine that 
//contains an AssetFileDescriptor, which you can get by 
//calling getAssets().openFd("filename.mp3"); 
AssetFileDescriptor afd = item.getDescriptor(); 

mp.reset(); 
//leaving out the try/catch block for conciseness 
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
mp.prepare(); 
mp.start(); 
+0

не могли бы вы быть более конкретными в своем комментарии? // обратите внимание, что в моем ... ("filename.mp3"); –

+0

case R.id.btn: \t \t MediaPlayer mp = GlobalVars.getMediaPlayer(); \t \t \t \t \t \t AssetFileDescriptor AFD = getAssets() openFd (R.raw.gata);. Mp.reset(); \t \t \t \t mp.setDataSource (afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); mp.prepare(); mp.start(); ломать; –

+0

он выделяет красный openFd –

0

Вы можете использовать звуковой менеджер, если у вас конечный нет. звуков для воспроизведения. http://developer.android.com/reference/android/media/AudioManager.html

+0

метод, который я создал, возвращает исключение nullPointer. Не могли бы вы уточнить это? –

+0

Вы имеете в виду примерно следующее: –

+0

String url = "R.raw.aaaa"; MediaPlayer mp = new MediaPlayer(); try { mp.setDataSource (url); mp.setAudioStreamType (AudioManager.STREAM_MUSIC); mp.prepare(); mp.start(); –

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