2013-05-23 13 views
26

私は背景を再生する非常にシンプルなメディアプレイヤーを持っています。 apkからファイルを呼び出しますが、音楽やSDカードのようなディレクトリから再生したいのです。ここでシンプルなメディアプレイヤーがファイルパスからmp3を再生しますか?

は私のコードです:それは私のために働いたの下

private MediaPlayer mpintro; 

. 
. 

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

@Johnsimit使用デフォルトの例外e。 –

+1

これは次のように動作します: 'mpintro = MediaPlayer.create(this、Uri.parse(Environment.getExternalStorageDirectory()。getPath()+" /Music/intro.mp3 ")); mpintro.setLooping(true); mpintro.start(); ' 文字列ファイルパスとして正しく機能しませんでした。 –

+0

@Johnsimit私はhttp://localhost/Android/music/vande.mp3の中に私のすべてのmp3ファイルを配備しています。 Uri.parse(Environment.getExternalStorageDirectory()。getPath()+ "//localhost/Android/Music/vande.mp3")); mpintro.setLooping(true); mpintro.start(); 'しかし動作していません –

答えて

53

それはこのように動作します:

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

それは文字列のファイルパスとして正常に動作しませんでした...

+0

' mpintro'でNPEを取得しています – Prabs

3

は、コードを使用してください。ここで

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

' Environment.getExternalStorageDirectory() 'どうすればこのように使うことができますか? デバイスによっては、ファイルのパスに問題が生じることがあります。 –

+0

@MDこのタイプのパスを使用すると、sdcardの名前が異なっていて、一部のデバイスにも10 GBのインターネットメモリがあるため、外部メモリとして使用できます。このパスは機能しません。 –

+1

@Zala Janaksinh、これは単なる例です。私は彼に、それがどのように機能するかを伝えようとします。私は彼女の論理とコードを実装していません。 –

3

SDカードのオフプレイするMediaPlayerを設定するためのコードです:

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

あなたは完全な例hereを見ることができます。何か問題がある場合は教えてください。

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

この生のフォルダから再生します。

mycontext = application.this。を使用してください。

+0

ファイルパスを使用すると、** try/catch **でサラウンドと書かれています。 は必要ですか? –

+0

@John simitはいつもどんなコードでも正しいキャッチブロッキングを使用します。それは良い習慣と良いプログラミングテクニックです。 –

+0

'キャッチ(例外:IllegalArgumentException電子){ \t \t \t // TODO自動生成されたcatchブロック \t \t \t e.printStackTrace(); \t \t}キャッチ(SecurityExceptionが電子){ \t \t \t // TODO自動生成されたcatchブロック \t \t \t e.printStackTrace(); \t \t}キャッチ(IllegalStateExceptionが電子){ \t \t \t // TODO自動生成されたcatchブロック \t \t \t e.printStackTrace(); \t \t}キャッチ(IOExceptionを電子){ \t \t \t // TODO自動生成されたcatchブロック \t \t \t e.printStackTrace(); \t \t} ' それは私に全体のキャッチコードを与える、それは'例外のe'を使用するのに十分ですか、私は私に何を提案する必要がありますか? –

0

私はオーディオの再生のために、このクラスを使用します。あなたのオーディオの場所が の場合は、フォルダです。プレイ用

Callメソッド:

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

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

} 
関連する問題