2014-11-15 93 views
0

我正在開發一個測試應用程序,除了播放音樂外別無其他。這個應用程序背後的想法是,通常你有一個音樂播放器需要很長時間才能加載,並有所有那些額外的小工具和小玩意兒,沒有人,或者至少不是你用的。這個應用程序只播放音樂,時期。它幾乎立即加載。無法從本地文件系統播放音樂,但可以播放SD卡

但我有些有趣。我需要找到一種方法讓用戶從文件系統中選擇一首歌曲,但我還沒有完成這項工作,所以我正在使用固定的歌曲URI來播放它。當我將這首歌曲放在本地文件系統上(即/storage/emulated/0/Music/SongName.mp3)時,按下播放按鈕後該應用程序將崩潰。但是,當我把歌曲放在SD卡上(即/storage/extSdCard/Music/SongName.mp3)時,它工作正常。

嗯,我得到它的工作,但我不知道如何或爲什麼它的作品。通常我會感到驚訝,並且不會再觸摸那段代碼,以便它繼續工作,但是這次我正在學習Android編程,並且想知道它爲什麼起作用。

這是從SD卡播放(作品)的代碼:

p = new MediaPlayer(); 
p.setAudioStreamType(AudioManager.STREAM_MUSIC); 
p.setDataSource(getApplicationContext(), Uri.fromFile(new File("/storage/extSdCard/Tests/Take Back The Night.mp3"))); 
p.prepare(); 
p.start(); 

這是從本地FS打碼(不工作):

p = new MediaPlayer(); 
p.setAudioStreamType(AudioManager.STREAM_MUSIC); 
p.setDataSource(getApplicationContext(), Uri.fromFile(new File("/storage/emulated/0/Music/heybrother.mp3"))); 
p.prepare(); 
p.start(); 

由於你可以看到,它幾乎是一樣的,所以我得出結論,URI中可能有錯誤。但我看不到任何拼寫錯誤,我多次重複輸入。 URI是否因此而格格不入?

+1

p.setDataSource(「/ mnt/sdcard/yourdirectory/youraudiofile.mp3」); –

+0

不起作用:U – latias1290

回答

0

我明白了!

首先,你需要獲得音樂文件夾的路徑是這樣的:

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) 
       .getPath() + "/"; 

然後你就可以在音樂文件夾中添加的文件名:

String file = path + "ThatOneSong.mp3"; 

然後發揮它作爲正常。 (或者你可以在一條很長的路線上做到這一點,但這是一種混亂。)