2013-05-23 23 views
26

Mam bardzo prosty mediaplayer, który odtwarza tło. Wywołuje plik z apk, ale chcę, żeby grał z dowolnego katalogu, takiego jak muzyka czy sdcard.Prosty mediaplayer odtwarza mp3 ze ścieżki pliku?

Oto moje kody:

private MediaPlayer mpintro; 

. 
. 

mpintro = MediaPlayer.create(this, R.raw.intro); 
     mpintro.setLooping(true); 
     mpintro.start(); 
+1

@Johnsimit wykorzystanie Domyślnie Exception. –

+1

Działa to tak: 'mpintro = MediaPlayer.create (this, Uri.parse (Environment.getExternalStorageDirectory(). GetPath() +" /Music/intro.mp3 ")); mpintro.setLooping (true); mpintro.start(); ' To nie działało poprawnie jako ciąg plików ... –

+0

@Johnsimit Mam wdrożone moje wszystkie pliki mp3 wewnątrz http: //localhost/Android/music/vande.mp3 użyłem jak hw. powiedział Uri.parse (Environment.getExternalStorageDirectory(). getPath() + "//localhost/Android/Music/vande.mp3")); mpintro.setLooping (true); mpintro.start(); 'ale nie działa –

Odpowiedz

53

To działa tak:

mpintro = MediaPlayer.create(this, Uri.parse(Environment.getExternalStorageDirectory().getPath()+ "/Music/intro.mp3")); 
mpintro.setLooping(true); 
     mpintro.start(); 

To nie działa poprawnie jako ciąg filePath ...

+0

Dostaję NPE w' mpintro' – Prabs

3

użyć kodu poniżej pracował dla mnie.

MediaPlayer mp = new MediaPlayer(); 
mp.setDataSource("/mnt/sdcard/yourdirectory/youraudiofile.mp3"); 
mp.prepare(); 
mp.start(); 
+0

' Environment.getExternalStorageDirectory() 'jak mogę tego użyć? Czasami różne urządzenia mogą powodować problem z ścieżką szerokości pliku? –

+0

@MD, jeśli używasz ścieżki tego typu, to jakiś czas nazwa karty jest różna. A niektóre urządzenia mają również 10 GB plus pamięć internetową, więc jest używana jako pamięć zewnętrzna. Ta ścieżka nie może działać. –

+1

@Zala Janaksinh, To tylko przykład. Próbuję mu powiedzieć, jak to działa. Nie wdrażam jej logiki i kodu. –

3

Oto kod założyć MediaPlayer do play off z karty SD:

String PATH_TO_FILE = "/sdcard/music.mp3";  
mediaPlayer = new MediaPlayer(); 
mediaPlayer.setDataSource(PATH_TO_FILE); 
mediaPlayer.prepare(); 
mediaPlayer.start() 

Można zobaczyć pełną przykład here. Daj mi znać, jeśli masz jakiekolwiek problemy.

18
String filePath = Environment.getExternalStorageDirectory()+"/yourfolderNAme/yopurfile.mp3"; 
mediaPlayer = new MediaPlayer(); 
mediaPlayer.setDataSource(filePath); 
mediaPlayer.prepare(); 
mediaPlayer.start() 

i ten plik z surowego folderu.

int resID = myContext.getResources().getIdentifier(playSoundName,"raw",myContext.getPackageName()); 

      MediaPlayer mediaPlayer = MediaPlayer.create(myContext,resID); 
      mediaPlayer.prepare(); 
      mediaPlayer.start(); 

mycontext = application.this. użycie.

+0

mówi ** surround przy próbie/catch **, kiedy używam ścieżki do pliku .. jest to potrzebne? –

+0

@John simit za każdym razem, gdy jakikolwiek kod użyjesz funkcji catch catch blosk to dobry nawyk i dobra technika programistyczna. –

+0

'catch (IllegalArgumentException e) { \t \t \t // TODO Auto-generowane blok catch \t \t \t w.printStackTrace(); \t \t} zaczep (SecurityException e) { \t \t \t // Do zrobienia Automatycznie generowane catch \t \t \t w.printStackTrace(); \t \t} zaczep (IllegalStateException e) { \t \t \t // Do zrobienia Automatycznie generowane catch \t \t \t w.printStackTrace(); \t \t} zaczep (IOException e) { \t \t \t // Do zrobienia Automatycznie generowane catch \t \t \t w.printStackTrace(); \t \t} ' daje mi cały kod catch, czy wystarczy użyć' Exception e' lub czy powinienem użyć tego, co mi zasugerowałem? –

0

Używam tej klasy do odtwarzania dźwięku. Jeśli lokalizacja dźwięku to surowy folder.

metoda Zaproszenie do zaawansowania:

new AudioPlayer().play(mContext, getResources().getIdentifier(alphabetItemList.get(mPosition) 
         .getDetail().get(0).getAudio(),"raw", getPackageName())); 

klasa AudioPlayer.java:

public class AudioPlayer { 

    private MediaPlayer mMediaPlayer; 

    public void stop() { 
     if (mMediaPlayer != null) { 
      mMediaPlayer.release(); 
      mMediaPlayer = null; 
     } 
    } 
    // mothod for raw folder (R.raw.fileName) 
    public void play(Context context, int rid){ 
     stop(); 

     mMediaPlayer = MediaPlayer.create(context, rid); 
     mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mediaPlayer) { 
       stop(); 
      } 
     }); 

     mMediaPlayer.start(); 
    } 

    // mothod for other folder 
    public void play(Context context, String name) { 
     stop(); 

     //mMediaPlayer = MediaPlayer.create(c, rid); 
     mMediaPlayer = MediaPlayer.create(context, Uri.parse("android.resource://"+ context.getPackageName()+"/your_file/"+name+".mp3")); 
     mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mediaPlayer) { 
       stop(); 
      } 
     }); 

     mMediaPlayer.start(); 
    } 

} 
Powiązane problemy