2014-11-15 62 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"; 

然后发挥它作为正常。 (或者你可以在一条很长的路线上做到这一点,但这是一种混乱。)